[英]Check if value exists in another (joined) table and fill column in results accordingly
/* Table Sales */
CREATE TABLE sales (
id int auto_increment primary key,
campaign VARCHAR(255),
quantity INT
);
INSERT INTO sales
(campaign, quantity)
VALUES
("C001", "125"),
("C002", "300"),
("C003", "700"),
("C004", "900"),
("C005", "600");
/* Table Tranches */
CREATE TABLE tranches (
id int auto_increment primary key,
campaign VARCHAR(255),
tranches VARCHAR(255),
quantity INT
);
INSERT INTO tranches
(campaign, tranches, quantity)
VALUES
("C001", "t1", "125"),
("C001", "t2", "300"),
("C001", "t3", "700"),
("C003", "t1", "600"),
("C003", "t2", "465");
預期結果:
campaign quantity exists_in_tranches
C001 125 yes
C002 300 no
C003 700 yes
C004 900 no
C005 600 no
在abvoe比如我有兩個表名為sales
和tranches
。
正如您所看到的,表sales
一些campaigns
確實在表tranches
有一個條目。 還有一些不是。
在列exists_in_tranches
在查詢結果我要檢查,如果某個campaign
從表sales
在表中存在tranches
,如果因此它應該被描述成yes
別人應該no
。
像這樣的東西:
SELECT
s.campaign,
s.quantity,
(CASE WHEN exists in table tranches THEN "yes" ELSE "no" END) AS exists_in_tranches
FROM sales s
LEFT JOIN tranches c ON c.campaign = s.campaign
GROUP BY 1;
我必須如何修改query
才能達到預期的結果?
您可以嘗試以下操作 - 檢查is not null
並且您不需要添加 group by 子句,因為您沒有使用任何聚合函數 - DEMO Here
SELECT distinct
s.campaign,
s.quantity,
CASE WHEN c.campaign is not null THEN "yes" ELSE "no" END AS exists_in_tranches
FROM sales s
LEFT JOIN tranches c ON c.campaign = s.campaign
例如:
SELECT s.*
, MAX(CASE WHEN t.id IS NULL THEN 'no' ELSE 'yes' END) eit
FROM sales s
LEFT
JOIN tranches t
ON t.campaign = s.campaign
GROUP
BY s.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.