的例子是SQLServer的書面但查詢應該在MySQL上班逢。
鍵是HAVING COUNT語句等於必須匹配的屬性數量。如果屬性應該是(1,2,5),你就必須改變計數3
DECLARE @item_table TABLE (ID INTEGER PRIMARY KEY, Item CHAR(1))
DECLARE @attr_table TABLE (Attr INTEGER, Item_ID INTEGER)
INSERT INTO @item_table VALUES (1, 'A')
INSERT INTO @item_table VALUES (2, 'B')
INSERT INTO @item_table VALUES (3, 'C')
INSERT INTO @attr_table VALUES (1, 1)
INSERT INTO @attr_table VALUES (1, 2)
INSERT INTO @attr_table VALUES (2, 1)
INSERT INTO @attr_table VALUES (2, 3)
INSERT INTO @attr_table VALUES (3, 2)
INSERT INTO @attr_table VALUES (3, 3)
SELECT Item
FROM @item_table i
INNER JOIN @attr_table a ON a.Item_ID = i.ID
WHERE a.Attr IN (1, 3)
GROUP BY Item
HAVING COUNT(a.Attr) = 2
是不是做一個內部連接就等於第二次選擇? – 2009-04-28 08:01:48
這是脆弱的,使用`count =`,因爲它不會工作,除非確實有兩個attr行對應於具有指定attrs的項目。但更糟糕的是,如果有兩個attr行,item_id = 1和attr = 1,那麼它會失敗,因此它會帶回一個誤報,一個沒有attr = 3的項。它會增加一個組的成本。 – tpdi 2009-04-28 08:12:50