Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL在同一个表中递归选择_Mysql_Sql - Fatal编程技术网

Mysql SQL在同一个表中递归选择

Mysql SQL在同一个表中递归选择,mysql,sql,Mysql,Sql,我有一张这样结构的桌子: pedido\u venda\u餐厅 idpedido供应商餐厅,索引PK idpedido供应商餐厅负责人,FK(指向同一表格的idpedido供应商餐厅) codigo\u pv\u internoVarChar UNIQUE 我做了一个查询,其目标是通过用户键入的codigo\u pv\u interno查询应返回以下所有行: 键入codigo\u pv\u interno 使idpedido\u venda\u restaurant\u负责人等于键入co

我有一张这样结构的桌子:

pedido\u venda\u餐厅

  • idpedido供应商餐厅
    ,索引PK

  • idpedido供应商餐厅负责人
    ,FK(指向同一表格的
    idpedido供应商餐厅

  • codigo\u pv\u interno
    VarChar UNIQUE


我做了一个查询,其目标是通过用户键入的
codigo\u pv\u interno
查询应返回以下所有行:

  • 键入
    codigo\u pv\u interno
  • 使
    idpedido\u venda\u restaurant\u负责人
    等于键入
    codigo\u pv\u interno
    所在行的
    idpedido\u venda\u restaurant\u负责人
  • 使
    idpedido\u venda\u restaurant\u负责人
    等于键入
    codigo\u pv\u interno
    所在行的
    idpedido\u venda\u restaurant
这意味着查询应该返回他自己、孩子(如果存在)、父亲(如果存在)和兄弟(如果存在)


实际上,这个查询已经可以运行并返回所需的结果,但由于我对SQL的了解程度较低,我确实认为应该存在一种有效的方法来执行该查询。

您可以使用内部联接来检查表中是否存在元素:

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'
对要搜索值的其他表格重复此过程

请参见:
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'