我确实有一个包含该结构的表:
pedido_venda_restaurante :
idpedido_venda_restaurante
,Index PK
idpedido_venda_restaurante_principal
,FK(指向同一张桌的idpedido_venda_restaurante
)
codigo_pv_interno
VarChar UNIQUE
我查询的目标是由用户输入的codigo_pv_interno
查询应返回的所有行:
codigo_pv_interno
; idpedido_venda_restaurante_principal
等于idpedido_venda_restaurante_principal
所在行的codigo_pv_interno
; idpedido_venda_restaurante_principal
等于idpedido_venda_restaurante
所在行的codigo_pv_interno
; 这意味着查询应该返回自己,孩子(如果存在),父亲(如果存在)和兄弟(如果存在)
SELECT
idpedido_venda_restaurante
,codigo_pv_interno
,idpedido_venda_restaurante_principal
FROM pedido_venda_restaurante
WHERE idpedido_venda_restaurante IN (SELECT
pedido_origem.idpedido_venda_restaurante
FROM pedido_venda_restaurante AS pedido_origem
WHERE pedido_origem.codigo_pv_interno = '003')
OR idpedido_venda_restaurante IN (SELECT
idpedido_venda_restaurante
FROM pedido_venda_restaurante
WHERE idpedido_venda_restaurante_principal = (SELECT
idpedido_venda_restaurante_principal
FROM pedido_venda_restaurante
WHERE codigo_pv_interno = '003'))
OR idpedido_venda_restaurante IN (SELECT
idpedido_venda_restaurante
FROM pedido_venda_restaurante
WHERE idpedido_venda_restaurante = (SELECT
idpedido_venda_restaurante_principal
FROM pedido_venda_restaurante
WHERE codigo_pv_interno = '003'))
OR idpedido_venda_restaurante_principal = (SELECT
pedido_origem.idpedido_venda_restaurante
FROM pedido_venda_restaurante AS pedido_origem
WHERE pedido_origem.codigo_pv_interno = '003');
实际上这个查询已经运行并返回了所需的结果,但由于我对SQL的了解不多,我认为应该存在一种有效的方法。
答案 0 :(得分:0)
您可以使用INNER JOIN检查表中是否存在元素:
SELECT pvr.idpedido_venda_restaurante, pvr.codigo_pv_interno, pvr.idpedido_venda_restaurante_principal
FROM pedido_venda_restaurante pvr
INNER JOIN pedido_venda_restaurante as pedido_origem
ON pedido_origem.idpedido_venda_restaurante = pvr.idpedido_venda_restaurante
WHERE pvr.pedido_origem.codigo_pv_interno = '003'
对要搜索值的其他表重复此过程