Sql 从查询中添加列
我有两个表(Sql 从查询中添加列,sql,join,Sql,Join,我有两个表(tblBestsellers,tblAllsellers) tblAllsellers包括店里所有的书 tblBestsellers仅包括已超过配额的卖家 它们之间的唯一链接是它们的productID 是否可以在运行时添加标题为“畅销书”的列?使用将显示该书是否畅销的查询,例如 ProductID - Product Name - Bestseller ---------------------------------------- 324234 Har
tblBestsellers
,tblAllsellers
)
包括店里所有的书tblAllsellers
仅包括已超过配额的卖家tblBestsellers
productID
是否可以在运行时添加标题为“畅销书”的列?使用将显示该书是否畅销的查询,例如
ProductID - Product Name - Bestseller
----------------------------------------
324234 Harry Potter Y
382932 LOTHR Y
234292 SQL Guide N
等等
我怀疑某处有一个IF语句
SELECT *
FROM tblAllsellers, tblbestsellers
您应该在ProductID上执行
tblAllSellers
与tblBestSellers
的左连接。如果在tblBestSellers
中有某个给定ProductID的记录,则表示该产品是畅销书,否则就不是畅销书。因此,您可以在案例
语句中为最后一列畅销书
使用此列
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
您可以在另一个具有连接的查询中使用此选项,如下所示:
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
如果要将此查询的结果与另一个查询的结果连接起来,则可以按如下操作:
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语句中的列数和数据类型相同。您可以更好地使用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
您使用哪个数据库系统(SQLServer、MySQL、Oracle等)?这很好,那么我如何将此查询与另一个具有大量内部联接的查询组合起来呢?我尝试了UNION,但收到错误消息“使用UNION、INTERSECT或EXCEPT组合的所有查询在其目标行中必须具有相同数量的表达式”,请将此查询括在括号中,并提供类似的别名(请参阅上面的代码更新(仍然收到错误)。提前感谢。非常感谢您的帮助,但是我注意到案例陈述要么给出了全部N,要么给出了全部Y,并且没有正确比较两个表列。如果不同表中的列有不同的名称,会有区别吗?