Mysql 用子查询左连接三个表
但是,这里你可以看到p3显示了两次。我不知道为什么。。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
我已经尝试了所有可能的方法,但我找不到任何补救办法 您可能在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