0
我有一個表有許多一對多的關係,其他兩個表時,列不和不等於值:匹配跨多行
CREATE TABLE assoc (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ref1 INT NOT NULL,
ref2 INT NOT NULL,
INDEX composite_key (ref1, ref2)
);
我想,以確定是否有與REF1協會說匹配並且不匹配ref2的給定值。作爲一個例子,可以說我想匹配,如果爲REF1的關聯存在1000的價值和REF2任何其他值:
INSERT INTO assoc (ref1, ref2) VALUES
(100, 10),
(100, 1000);
然而,沒有比賽應該如果只是數值1000被賦予與ref1相關聯,或者如果它是唯一的任何其他值:
INSERT INTO assoc (ref1,ref2) VALUES
(101, 10),
(102, 1000);
我想出了兩個解決方案。 1)創建一個臨時表,其中包含與該值匹配的行的結果,然後從中選擇與該值不匹配的行,以及2)加入同一個表,並指定該表中不匹配的條件。
CREATE TEMPORARY TABLE set
SELECT ref1 FROM assoc
WHERE ref2 = 1000;
SELECT assoc.ref1 FROM `set`
JOIN assoc ON `set`.ref1 = assoc.ref1
WHERE assoc.ref2 <> 1000;
SELECT assoc.ref1 FROM assoc
JOIN assoc AS `set` ON assoc.ref1 = `set`.ref1
WHERE assoc.ref2 = 1000 AND `set`.ref2 <> 1000;
但是,我想知道是否有其他方法可以完成此匹配?