我的SQL語句有點問題。我有一個帶有product_id和flag_id的表,現在我想獲得與指定的所有標誌匹配的product_id。我知道你必須自己內部加入,以匹配多個,但我不知道它的確切SQL。從MySQL中的多行中選擇一個值
表爲標誌
product_id | flag_id
1 1
1 51
1 23
2 1
2 51
3 1
我想獲得已FLAG_ID 1,51和23
我的SQL語句有點問題。我有一個帶有product_id和flag_id的表,現在我想獲得與指定的所有標誌匹配的product_id。我知道你必須自己內部加入,以匹配多個,但我不知道它的確切SQL。從MySQL中的多行中選擇一個值
表爲標誌
product_id | flag_id
1 1
1 51
1 23
2 1
2 51
3 1
我想獲得已FLAG_ID 1,51和23
得到這比賽所有標誌指定
的PRODUCT_ID所有產品
此問題被稱爲Relational Division。解決這個問題的一種方法是這樣做:
GROUP BY product_id
。IN
謂詞可指定要匹配哪些標誌。HAVING
條款以確保標誌的每個產品都有,這樣的:
SELECT product_id
FROM flags
WHERE flag_id IN(1, 51, 23)
GROUP BY product_id
HAVING COUNT(DISTINCT flag_id) = 3
的HAVING
條款將確保所選擇的product_id
必須同時具備三個標誌,如果它有隻有一兩個它會被淘汰。
看到它在這裏的行動:
這會給你只:
| PRODUCT_ID |
--------------
| 1 |
+1的良好解釋:) –
只是爲了清除一些東西,這會假定'product_id'不是主鍵? – epoch
@epoch - 是的,你是對的。對不起,問題是缺乏關於這個問題的更多細節,但現在他發佈了一些示例數據。 –
試試這個:
SELECT *
FROM your_table
WHERE flag_id IN(1,2,..);
感謝您的回答,但我一直在尋找其他的東西:) –
首先,它會幫助,如果你可以指定你有嘗試過,但我明白你需要讓產品具有一定的標誌,所以你可以用WHERE
:
SELECT product_id FROM Product WHERE flag_id IN (1,2,3,4,5)
感謝您的回答,但我一直在尋找其他東西:) –
嘗試:
SELECT *
FROM TABLE_NAME A INNER JOIN TABLE_NAME B ON A.product_id = B.product_id
感謝您的回答,但我正在尋找別的東西:) –
嗨@Ulrik,一些示例表或查詢將有助於 – kevinm