簡體   English   中英

從一個表中選擇記錄

[英]Selecting records from one table

我有下表(tbl_product_rel):

id  product_id  attr_id
1      1           10
2      1           15
3      1           20
4      2           6
5      2           9
6      3           10
7      3           15
8      3           20
9      4           15

我想獲取具有完全等於10、15、20的attr_id的product_id。 如果我使用MySQL IN

tbl_product_rel attr_id IN(10,15,20)中選擇DISTINCT(product_id)

所以我也得到了attr_id等於15的product_id,但沒有attr_ids 10和20。

有任何想法嗎 ?

您可以使用這樣的查詢,但我不知道這是否是最佳解決方案:)

SELECT * FROM tbl_product_rel WHERE attr_id IN (10,15,20) GROUP BY product_id HAVING COUNT(product_id) = 3

您可能會覺得查詢不起作用的原因可能是由於DISTINCT函數。
想想您想要的輸出是什么? 您需要獲取attr_id為10、15或20的所有product_id。這意味着您需要以下id:

id  product_id  attr_id
1      1 OK          10 
2      1 OK          15
3      1 OK          20
4      2 NO          6
5      2 NO          9
6      3 OK          10
7      3 OK          15
8      3 OK          20
9      4 OK          15

因此,沒有區別的基本查詢應返回:

1, 1, 1, 3, 3, 3, 4

如果使用不重復,則將獲得唯一的ID:

1, 3, 4 

我相信這就是你得到的。

您可能需要“ id”而不是“ product_id”。

更新:

嗯,我現在可能是您的問題所在。 您期望獲得滿足所有3個條件的product_id。 您不能使用IN因為IN將ID與OR聯接在一起。 您編寫的查詢可以重寫為:

`SELECT DISTINCT(product_id) FROM tbl_product_rel WHERE attr_id = 10 OR attr_id = 15 OR attr_id = 20`. 

如果您確定沒有重復項(即2條記錄的attr_id = 20),那么您的解決方案將是

`SELECT product_id FROM tbl_product_rel WHERE attr_id IN (10, 15, 20) GROUP BY product_id HAVING count(*) = 3

但這在您允許重復的情況下將不起作用,例如在這種情況下:

id  product_id  attr_id
1      1          10 
2      1          20
3      1          20

您將得到1,但您不應該得到1(根據您的需要)。 請讓我知道是否允許這種情況。

聽起來您只需要具有所有三個屬性ID的product_id。 您可以通過一些丑陋的子查詢來做到這一點:

SELECT DISTINCT(product_id) FROM tbl_product_rel
  WHERE product_id IN 
    (SELECT product_id FROM tbl_product_rel WHERE attr_id=10)
  AND product_id IN
    (SELECT product_id FROM tbl_product_rel WHERE attr_id=15)
  AND product_id IN
    (SELECT product_id FROM tbl_product_rel WHERE attr_id=20)

您還可以進行一些更丑陋的聯接。

刪除獨特的功能:

SELECT product_id FROM tbl_product_rel WHERE attr_id IN (10,15,20)

暫無
暫無

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

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