簡體   English   中英

連接數據的MySQL條件

[英]MySQL condition on joined data

我有兩個表“ customers”和“ campaigns”:

    customers
    -------------
    id   | int
    -------------
    name | varchar 


    campaigns
    ----------------------
    id           | int
    ----------------------
    customers_id | int
    ----------------------
    name         | varchar

一個客戶可以有多個廣告系列。 這兩個表之間的關聯是通過campaigns.customers_id = customers.id 現在,我要獲取所有已獲得廣告系列的名稱為“ A”和名稱為“ B”的客戶。

我嘗試了一個帶有IN語句的JOIN ,但它返回了已收到廣告系列“ A”或“ B”中任何一個的所有客戶:

    SELECT
      customers.name
    FROM
      customers
    JOIN
      campaigns
    ON
      customers.id=campaigns.customers_id
    WHERE
      campaigns.name IN('A','B')

非常感謝!

您已使用customers.id=campaigns.id而非customers.id=campaigns.customers_id加入了廣告系列表。

正確查詢為

SELECT
      customers.name
    FROM
      customers
    JOIN
      campaigns
    ON
      customers.id=campaigns.customers_id
    WHERE
      campaigns.name IN('A','B')

這應該工作:)

您需要為每個廣告系列加入

SELECT
  customers.name
FROM
  customers
INNER JOIN campaigns c1 ON customers.id=c1.id and c1.name = 'A'
INNER JOIN campaigns c2 ON customers.id=c2.id and c2.name = 'B'

現在,這將包含同時接收到兩個客戶的客戶。

SELECT
  customers.name
FROM
  customers
LEFT JOIN campaigns c1 ON customers.id=c1.customers_id and c1.name = 'A'
LEFT JOIN campaigns c2 ON customers.id=c2.customers_id and c2.name = 'B'

通過第一個LEFT JOIN,您將獲得具有廣告系列且名稱為“ A”的客戶,然后結果將與名稱為“ B”的廣告系列合並。

僅選擇campaign.name = Acampaign.name = B的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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