[英]My MySQL query with two JOINs does not work
I have written the following query, which does not work. 我写了下面的查询,它不起作用。 I want to know how to make it work.
我想知道如何使其工作。 It is a two-JOIN query which fails to work.
这是一个两联接查询,无法正常工作。
SELECT oc_download.download_id, oc_product_to_download.download_id, oc_download_description.download_id
FROM oc_download
LEFT JOIN oc_product_to_download
ON oc_download.download_id = oc_product_to_download.download_id
LEFT JOIN
oc_download.download_id = oc_download_description.download_id
WHERE oc_product_to_download.product_id = 89
With single JOIN it works, but adding the second JOIN it fails. 使用单个JOIN可以工作,但是添加第二个JOIN则失败。 here is the clean working one-JOIN query:
这是干净的工作一联接查询:
SELECT oc_download.download_id, oc_product_to_download.download_id, oc_download_description.download_id
FROM oc_download
LEFT JOIN oc_product_to_download
ON oc_download.download_id = oc_product_to_download.download_id
WHERE oc_product_to_download.product_id = 89
How should I use multiple JOIN in one single query? 如何在一个查询中使用多个JOIN?
You forgot the table name in the 2nd join 您忘记了第二个联接中的表名
SELECT d.download_id, p.download_id, dd.download_id
FROM oc_download d
LEFT JOIN oc_product_to_download p ON d.download_id = p.download_id
LEFT JOIN oc_download_description dd ON d.download_id = dd.download_id
WHERE p.product_id = 89
And your where
clause turns your left join
into an inner join
. 您的
where
子句将您的left join
变成inner join
。 If you don't want that then change your query to 如果您不希望这样做,则将查询更改为
SELECT d.download_id, p.download_id, dd.download_id
FROM oc_download d
LEFT JOIN oc_product_to_download p ON d.download_id = p.download_id
AND p.product_id = 89
LEFT JOIN oc_download_description dd ON d.download_id = dd.download_id
This is your query fixed up a bit, using table aliases and proper join
syntax: 这是您的查询,使用表别名和正确的
join
语法进行了一些修复:
SELECT od.download_id, opd.download_id, odd.download_id
FROM oc_download od LEFT JOIN
oc_product_to_download opd
ON od.download_id = opd.download_id LEFT JOIN
oc_download_description odd
od.download_id = odd.download_id
WHERE opd.product_id = 89;
You are using left join
, but this appears to be unnecessary. 您正在使用
left join
,但这似乎是不必要的。 The on
clause is undoing the first outer join, turning it into an inner join (unmatched rows would have a NULL
value, which are filtered out by the where
clause). on
子句撤消第一个外部联接,将其转换为内部联接(不匹配的行将具有NULL
值,并由where
子句过滤掉)。 In fact, I would guess that your data has well defined foreign key relationships among the columns being joined. 实际上,我想您的数据在要连接的列之间具有定义明确的外键关系。 If this is the case, you should use
inner join
(or just join
) for the query: 如果是这种情况,则应对查询使用
inner join
(或仅使用join
):
SELECT od.download_id, opd.download_id, odd.download_id
FROM oc_download od JOIN
oc_product_to_download opd
ON od.download_id = opd.download_id JOIN
oc_download_description odd
od.download_id = odd.download_id
WHERE opd.product_id = 89;
The left join
is misleading because it implies that some keys might not match. left join
具有误导性,因为它暗示某些键可能不匹配。 You also run the risk of confusing the optimizer. 您还冒着混淆优化器的风险。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.