当两者在自己的select语句中都有自己的别名和表引用时,如何加入A.ID_Number和B.ID_Number?最后一行目前不正确,我需要知道如何解决这个问题。
SELECT*FROM
(SELECT b.ID_Number, b.Price, s.Quantity FROM tbl_bills b
LEFT JOIN tbl_stock s ON b.Price = s.Price)
AS X
LEFT JOIN
(SELECT c.ID_Number, c.Currency, p.Purchased FROM tbl_currency c
WHERE blahblahblah)
AS Y
ON X.b.ID_Number = Y.c.ID_Number
可能有更好的方法来完成整个语句,但我只想知道如何正确地执行最后一行,因为我的实际查询很多,更长。
编辑:问题解决了。答案 0 :(得分:2)
您必须取消b.
和c.
:
ON X.ID_Number = Y.ID_Number
答案 1 :(得分:2)
主查询看不到子查询中的表名和别名。只需参考列名称。
ON X.ID_Number = Y.ID_Number
答案 2 :(得分:2)
您只使用您定义的别名。 。 。 X
和Y
。以下是整个查询中的示例:
SELECT x.ID_Number, x.Price, x.Quantity, y.ID_Number, y.Currency, y.Purchased
FROM (SELECT b.ID_Number, b.Price, s.Quantity
FROM tbl_bills b LEFT JOIN
tbl_stock s
ON b.Price = s.Price
) X LEFT JOIN
(SELECT c.ID_Number, c.Currency, p.Purchased
FROM tbl_currency c
WHERE blahblahblah
) Y
ON X.ID_Number = Y.ID_Number;
请注意,p.purchased
仍有与无法识别的列名相同的错误。
对我来说,这是编写查询的愚蠢方式。我会改用:
SELECT b.ID_Number, b.Price, s.Quantity, c.Currency, p.Purchased -- c.ID_Number, is not needed unless you want to see if there is a match
FROM tbl_bills b LEFT JOIN
tbl_stock s
ON b.Price = s.Price LEFT JOIN
tbl_currency c
ON b.ID_Number = c.ID_Number AND blahblahblah;
这更短,更容易编写,更易于阅读,并且应该具有更好的性能,不会实现子查询。
答案 3 :(得分:1)
我会这样做:
SELECT b.ID_Number, b.Price, s.Quantity, c.Currency
FROM tbl_bills b
LEFT JOIN tbl_stock s USING (Price)
LEFT JOIN tbl_currency c
ON c.ID_Number = b.ID_Number AND { other criteria goes here }
要获得更具体的信息,您需要发布实际查询。
要解决您的更新"如果我尝试X.ID_Number = Y.ID_Number,我会收到错误"未知栏' X.ID_Number in' on子句& #39;" - 唯一的原因是您的实际查询与您发布的查询不同。人们根据您发布的代码提供答案。在两个子查询中选择ID_Number
非常重要,加入将起作用。