Sql 将左外部联接重写为子查询

Sql 将左外部联接重写为子查询,sql,subquery,outer-join,Sql,Subquery,Outer Join,是否可以重写以下左连接: SELECT wanted.id AS wanted_id, offers.id AS offer_id, departure_city, departure_country, destination_city, destination_country, departure_date_min, departure_date_max, MIN(price) as price FROM wanted LEFT JOIN (SELECT id, wanted_id, SUM(

是否可以重写以下左连接:

SELECT wanted.id AS wanted_id, offers.id AS offer_id, departure_city,
departure_country, destination_city, destination_country, departure_date_min, departure_date_max, MIN(price) as price
FROM wanted LEFT JOIN (SELECT id, wanted_id, SUM(price) AS price FROM `offers` GROUP BY offer_date) AS offers ON wanted.id = offers.wanted_id
WHERE wanted.id IN (SELECT wanted_id FROM wanted_by_user WHERE user_ID=%d) group by offer_id
作为子查询? 我曾经这样尝试过,从技术上讲,它工作得很好,但是:它的工作原理与内部联接类似(即如果表“offers”中没有匹配项,则不显示行):


用您正在使用的数据库标记您的问题。第二,解释你的意思。您的查询已经有了一个子查询和
左连接
,那么您真正想做什么呢。而且,作为一条简单的规则,在
FROM
子句中永远不要使用逗号。你说的“永远不要使用逗号”是什么意思?我还应该如何在FROM子句中选择多个表?回答您的第一个问题:我的理解是子查询是连接的另一种方式,更容易阅读一些参数始终使用显式
JOIN
语法,就像您在第一个查询中所做的那样。这是ANSI几十年来的标准语法,比使用逗号更强大。您混合了隐式(内部)联接(在
where
子句中)和显式
JOIN
运算符。不要这样做。
LEFT JOIN
需要一个
ON…
子句。以及子查询的别名/相关名称,以便外部查询能够引用它。就这些。用你正在使用的数据库标记你的问题。第二,解释你的意思。您的查询已经有了一个子查询和
左连接
,那么您真正想做什么呢。而且,作为一条简单的规则,在
FROM
子句中永远不要使用逗号。你说的“永远不要使用逗号”是什么意思?我还应该如何在FROM子句中选择多个表?回答您的第一个问题:我的理解是子查询是连接的另一种方式,更容易阅读一些参数始终使用显式
JOIN
语法,就像您在第一个查询中所做的那样。这是ANSI几十年来的标准语法,比使用逗号更强大。您混合了隐式(内部)联接(在
where
子句中)和显式
JOIN
运算符。不要这样做。
LEFT JOIN
需要一个
ON…
子句。以及子查询的别名/相关名称,以便外部查询能够引用它。这就是全部。
FROM wanted, (SELECT id, SUM(price) AS price FROM `offers` GROUP BY offer_date) AS offers "
    ."WHERE wanted.id IN(SELECT wanted_id FROM wanted_by_user WHERE user_ID=%s)