O título da pergunta não está claro, tentarei descrevê-lo.
No meu modelo tenho o seguinte:
Um objeto Rede inclui Linhas e um objeto Linha inclui Rotas (isso é para transporte público).
Agora tenho uma tabela de Assinaturas onde trato das assinaturas dos usuários para viajar em Redes, Linhas ou Rotas:
╔════╦═════════╦══════╦═══════╗
║ ID ║ Network ║ Line ║ Route ║
╠════╬═════════╬══════╬═══════╣
║ A ║ 1 ║ 6 ║ 12 ║
║ B ║ 2 ║ 3 ║ NULL ║
║ C ║ 1 ║ NULL ║ NULL ║
╚════╩═════════╩══════╩═══════╝
Que significa :
- A assinatura A é válida apenas na rota 12
- A assinatura B é válida em todas as rotas da linha 3
- As assinaturas C são válidas em todas as rotas da rede 1.
Preciso obter todas as assinaturas permitidas na rota nº 12, ou seja, preciso buscar a primeira e a terceira linha.
Que tipo de pedido me permitiria fazer isso, por favor?
No final, estarei fazendo isso em Java com JPQL, mas gostaria de entender como fazer isso em SQL simples primeiro.
Aqui está um SQL Fiddle caso alguém esteja disposto a ajudar.
Esta não é a melhor maneira de escrever esta consulta, mas deve funcionar.
Você pode alterar as condições where para junções. Como você pode ver, está executando 3 instruções select na
IN
cláusula (uma das quais é uma repetição) que pode afetar o desempenho. Algo como: