Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 用子查询左连接三个表_Mysql_Subquery_Left Join_Multiple Tables - Fatal编程技术网

Mysql 用子查询左连接三个表

Mysql 用子查询左连接三个表,mysql,subquery,left-join,multiple-tables,Mysql,Subquery,Left Join,Multiple Tables,但是,这里你可以看到p3显示了两次。我不知道为什么。。 我已经尝试了所有可能的方法,但我找不到任何补救办法 您可能在offertran或Products中有两条记录,其产品ID为p3。您可以将其更改为从中选择不同的p.*。。。这样,任何重复的行都将被忽略 要查看offertran返回的内容,请将您选择的p.*更改为选择*可能缺少“o”和“ot”之间的连接条件: SELECT p.* FROM Products p LEFT JOIN offertran ot ON p.prod_id = ot

但是,这里你可以看到p3显示了两次。我不知道为什么。。
我已经尝试了所有可能的方法,但我找不到任何补救办法

您可能在offertran或Products中有两条记录,其产品ID为p3。您可以将其更改为从中选择不同的p.*。。。这样,任何重复的行都将被忽略


要查看offertran返回的内容,请将您选择的p.*更改为选择*

可能缺少“o”和“ot”之间的连接条件:

SELECT p.*
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id
LEFT JOIN Offers o
ON ot.offer_id IN(SELECT id FROM Offers 
               Where dF<=3 AND dt>=3)
**AND ot.offer_id = o.id***
ORDER BY o.id DESC, 
      p.prod_id ASC
LIMIT 20

或者我错过了什么,没有理解你想从数据库中查询什么。

可能是你在找这个。这将只返回p3一次。 在第二个左连接条件中,您错过了o.id

SELECT p.*
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id
LEFT JOIN Offers o
ON o.id =  (SELECT id FROM Offers 
            Where dF<=3 AND dt>=3)

ORDER BY o.id DESC, 
          p.prod_id ASC
LIMIT 20
中的问题

LEFT JOIN Offers o
ON ot.offer_id =  (SELECT id FROM Offers 
                   Where dF<=3 AND dt>=3)
您使用常量值加入ot.offer\u id,这并不意味着您从offers表中选择它们

正确的方法是:

SELECT p.*
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id
LEFT JOIN Offers o
ON ot.offer_id = o.id AND o.dF<=3 AND o.dt>=3
ORDER BY o.id DESC, 
          p.prod_id ASC
LIMIT 20

这不是我想要的。。在这里,我丢失了所有的序列。。无论如何。。谢谢你的回答,我只有一张p3亚当的记录。谢谢你的回复
LEFT JOIN Offers o
ON ot.offer_id =  (SELECT id FROM Offers 
                   Where dF<=3 AND dt>=3)
SELECT p.*
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id
LEFT JOIN Offers o
ON ot.offer_id = o.id AND o.dF<=3 AND o.dt>=3
ORDER BY o.id DESC, 
          p.prod_id ASC
LIMIT 20