簡體   English   中英

檢查另一個(連接)表中是否存在值並相應地填充結果列

[英]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比如我有兩個表名為salestranches
正如您所看到的,表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM