我有两张桌子(tblBestsellers
,tblAllsellers
)。
tblAllsellers
包含商店中的所有图书tblBestsellers
仅包含已超过其配额销售的那些。他们之间唯一的联系是productID
。
是否可以在运行时添加标题为Bestseller
的列?使用一个查询,其中将显示该书是否是畅销书,如
ProductID - Product Name - Bestseller
----------------------------------------
324234 Harry Potter Y
382932 LOTHR Y
234292 SQL Guide N
等等。
我怀疑那里有IF语句?
SELECT *
FROM tblAllsellers, tblbestsellers
答案 0 :(得分:2)
您应该在ProductID上使用LEFT JOIN
执行tblAllSellers
tblBestSellers
个tblBestSellers
。如果给定ProductID的CASE
中有记录,则表示该广告是最畅销的,否则不是。因此,您可以在最后一列BestSeller
的{{1}}语句中使用此列。
SELECT
A.*,
CASE
WHEN B.ProductId IS NULL THEN 'N'
ELSE 'Y'
END 'BestSeller'
FROM
tblAllSellers A
LEFT JOIN tblBestSellers B
ON A.ProductId = B.ProductID
您可以在另一个使用JOIN的查询中使用它,如下所示:
SELECT A.*
FROM
AnotherTable X
JOIN
(
SELECT
A.*,
CASE
WHEN B.ProductId IS NULL THEN 'N'
ELSE 'Y'
END 'BestSeller'
FROM
tblAllSellers A
LEFT JOIN tblBestSellers B
ON A.ProductId = B.ProductID
) AS Y
ON X.ProductId = Y.ProductID
如果您想将此查询的结果与来自其他查询的结果一起加入,那么您可以按以下方式进行:
SELECT A.ProductId, A.COlumn1, A.Column2 ...
FROM
AnotherTable X
UNION
SELECT Y.ProductId, Y.Column1, Y.Column2..
FROM
(
SELECT
A.*,
CASE
WHEN B.ProductId IS NULL THEN 'N'
ELSE 'Y'
END 'BestSeller'
FROM
tblAllSellers A
LEFT JOIN tblBestSellers B
ON A.ProductId = B.ProductID
) AS Y
对于UNION场景,请确保两个SELECT语句中列的数量,数据类型相同。
答案 1 :(得分:0)
您可以更好地使用Case
声明。
SELECT A.*, CASE WHEN B.ProductId IS NULL THEN 'N' ELSE 'Y' END 'BestSeller'
FROM
tblAllSellers A, tblBestSellers B
where A.ProductId = B.ProductID