[英]How to get all potential orders from a mysql table
我有一個mysql查詢,無法完全弄清楚如何從給定country_id
提取某個product_id
所有潛在客戶。 我想要一個每個客戶只有一個記錄的結果。
我的桌子是orders
和customers
。
---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.