簡體   English   中英

如何從mysql表中獲取所有潛在訂單

[英]How to get all potential orders from a mysql table

我有一個mysql查詢,無法完全弄清楚如何從給定country_id提取某個product_id所有潛在客戶。 我想要一個每個客戶只有一個記錄的結果。
我的桌子是orderscustomers

---customers--
customer_id
country_id
name
---orders---
order_id
product_id
customer_id

我當前在下面的查詢給出了太多結果。 即來自其他product_id的不product_id的記錄。這是我的查詢:

SELECT o.order_id
     , c.name
     , c.customer_id
     , c.country_id
     , o.product_id 
  FROM customers c 
  LEFT 
  JOIN orders o 
    ON o.customer_id = c.customer_id 
 WHERE o.product_id = 1 
    OR c.country_id = 1

一些示例結果可能如下所示:

order_id    name        customer_id country_id product_id
1           Joe Smith   1           1          1
2           Joe Smith   1           1          2
3           John Doe    2           1          1
4           Kirk Smith  3           1          1
NULL        Ron Rhoden  6           1          1
NULL        Sam Smith   7           1          1

出於我的目的,您可以假設給定的客戶只會訂購一次給定的產品。 請注意,我是如何獲得product_id=2 Joe Smith的結果的。 我不希望這個結果出現在我的清單中。 羅恩·羅丹(Ron Rhoden)和薩姆·史密斯(Sam Smith)的成績對我而言是理想的。 如何過濾product_id<>1記錄,但仍包括所有country_id=1記錄? 謝謝。

如果我理解正確,那么您希望來自“ 1”國家/地區的所有已訂購產品“ 1”的客戶。 我建議使用exists

select c.*
from customers c
where c.country_id = 1 and
      exists (select 1
              from orders o
              where o.customer_id = c.customer_id and
                    o.product_id = 1
             );

這是我的嘗試:

SELECT o.order_id
     , c.name
     , c.customer_id
     , c.country_id
     , o.product_id 
FROM customers c 
  LEFT 
  JOIN orders o ON o.customer_id = c.customer_id
WHERE o.order_id IN (SELECT order_id FROM orders WHERE product_id = 1)
OR c.country_id IN (SELECT customers.country_id FROM customers WHERE product_id = 1)
);

好吧,我認為這可行。 有點復雜,但是我首先從訂單中查詢了所有product_id = 1記錄,然后進行了UNION查詢,然后向country_id = 1但不在先前product_id = 1結果中的客戶中查詢了所有人。

選擇o.order_id,c.name,c.customer_id,c.country_id,o.product_id
來自客戶的c個左聯接訂單o上o.customer_id = c.customer_id WHERE o.product_id = 1 UNION SELECT NULL AS order_id,c.name,c.customer_id,c.country_id,NULL AS product_id
來自客戶c
c.country_id = 1並且c.customer_id不輸入的位置(從客戶中選擇c2.customer_id c2 INNER JOIN訂單o2在c2.customer_id = o2.customer_id處,o2.product_id = 1)

暫無
暫無

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

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