簡體   English   中英

如何從三個不同的表中排除查詢結果?

[英]how exclude the query result from three different tables?

我有3個表格,其中包含countriestransactions offers ,而我要嘗試的是從特定國家和設備中提取報價,我已經使用以下公式進行了操作:

   SELECT
    *
FROM countries a
INNER JOIN offers b ON a.id = b.offer_id
WHERE a.country = "US"
      AND b.device = 'all'
UNION
SELECT
    *
FROM countries a
INNER JOIN offers b ON a.id = b.offer_id
WHERE a.country = "US"
      AND b.device LIKE 'iphone%';

此代碼有效,但現在我想排除表userstransactions之間具有相同ref的報價

它應該工作的方式是:

  • 來自X國的用戶在Y設備上輸入。
  • 用戶根據他的國家和設備選擇要約。
  • 要約通過回寄transactions注冊。
  • 用戶進入主頁,不再看到他已經完成的報價。

現在,我可以執行第3步,但不能執行第4步。 有什么幫助嗎?

這是表的示例: SQL Fiddle

提前致謝

編輯

如果我把所有這些放在詞上,將會是:

Select all from *offers* where the **offer_id** match with **ID** from *countries* with the **country** "US" and also from *offers* have the **device** "iPhone" now exclude from *transactions* the offers with the **user** = "xxxxx" 

我希望這可以解釋我要做什么

無法查看查詢是如何針對特定用戶的,但是要排除交易中引用的商品,您可以使用NOT EXISTS

SELECT * 
FROM countries a 
INNER JOIN offers b ON a.id=b.offer_id 
WHERE a.country="US" AND b.device = 'all' 
  AND NOT EXISTS (SELECT 1 FROM transactions t WHERE t.offer = b.offer_Id)

您可以通過LEFT OUTER JOIN事務表的LEFT OUTER JOIN解決。
我在WHERE子句中添加了t.id IS NULL 因此,您的結果將僅顯示沒有交易的報價。

          SELECT * 
            FROM countries a 
      INNER JOIN offers b 
              ON a.id = b.offer_id 
 LEFT OUTER JOIN transactions t
              ON t.id = b.offer_id
           WHERE a.country = "US"
             AND t.id IS NULL

關於您的問題,我仍然不清楚表userscountries如何連接。
這是一個重要的細節,因為LEFT OUTER JOIN應該只是從該特定用戶那里獲取交易。 因此,條件transactions.user = user.ref也應添加到transactions.user = user.ref

每當您向我解釋此鏈接時,都會更新答案

暫無
暫無

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

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