MySQL - 使用 WHERE IN 子句连接 2 个表
MySQL - use WHERE IN clause to JOIN 2 tables
我正在尝试使用 WHERE
和 IN
加入 2 table,而不是 JOIN/LEFT JOIN
。
这是我写的SQL,当我运行它时失败了:
SELECT
product.price as price,
product.date as date,
product.status as status,
a.Title as title
FROM MarketingDb.Product product
WHERE product.Id
IN (
SELECT a.ListingId, a.Title FROM MarketingDb.Status a
)
LIMIT 15;
提到的错误消息:Unknown column 'a.Title' in 'field list'
根据我的理解,错误的发生似乎是因为我写的SQL只在子查询中提到了table MarketingDb.Status a
,而在外部[=37]中没有被识别=] 子句。
请问:SQL应该如何修改才能selecta.Title
成功?非常感谢您的帮助!
编辑 1:
我想问一下,如果不是只有 2 tables,现在我想加入 3rd/4th/... more tables using IN
,什么应该是正确的way/syntax要这样做吗?
这是我尝试但失败的方法:
SELECT
product.price as price,
product.date as date,
product.status as status,
(SELECT s.Title FROM MarketingDb.Status s WHERE s.ListingId = product.Id)
AS title
FROM MarketingDb.Product product
WHERE product.Id
IN (
SELECT DISTINCT a.ListingId, a.Title FROM MarketingDb.Status a
)
AND IN (
SELECT DISTINCT b.Id FROM MArketingDb.Price b
)
LIMIT 15;
如果您想在没有连接的情况下执行此操作,请使用标量相关子查询。假设 status(listingid)
与 product(id)
相关:
select
p.price,
p.date,
p.status,
(select s.title from marketingdb.status s where s.listingid = p.id) as title
from marketingdb.product p
需要强调的是,如果 status
中有多行与单个 product(id)
匹配,这将出错 - 如果您遇到这种情况,则要么限制行数在子查询中...或使用 join
,它允许多个匹配项..
我正在尝试使用 WHERE
和 IN
加入 2 table,而不是 JOIN/LEFT JOIN
。
这是我写的SQL,当我运行它时失败了:
SELECT
product.price as price,
product.date as date,
product.status as status,
a.Title as title
FROM MarketingDb.Product product
WHERE product.Id
IN (
SELECT a.ListingId, a.Title FROM MarketingDb.Status a
)
LIMIT 15;
提到的错误消息:Unknown column 'a.Title' in 'field list'
根据我的理解,错误的发生似乎是因为我写的SQL只在子查询中提到了table MarketingDb.Status a
,而在外部[=37]中没有被识别=] 子句。
请问:SQL应该如何修改才能selecta.Title
成功?非常感谢您的帮助!
编辑 1:
我想问一下,如果不是只有 2 tables,现在我想加入 3rd/4th/... more tables using IN
,什么应该是正确的way/syntax要这样做吗?
这是我尝试但失败的方法:
SELECT
product.price as price,
product.date as date,
product.status as status,
(SELECT s.Title FROM MarketingDb.Status s WHERE s.ListingId = product.Id)
AS title
FROM MarketingDb.Product product
WHERE product.Id
IN (
SELECT DISTINCT a.ListingId, a.Title FROM MarketingDb.Status a
)
AND IN (
SELECT DISTINCT b.Id FROM MArketingDb.Price b
)
LIMIT 15;
如果您想在没有连接的情况下执行此操作,请使用标量相关子查询。假设 status(listingid)
与 product(id)
相关:
select
p.price,
p.date,
p.status,
(select s.title from marketingdb.status s where s.listingid = p.id) as title
from marketingdb.product p
需要强调的是,如果 status
中有多行与单个 product(id)
匹配,这将出错 - 如果您遇到这种情况,则要么限制行数在子查询中...或使用 join
,它允许多个匹配项..