我有一个与其他两个表具有多对多关系的表: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)创建一个临时表,其中包含与该值匹配的行的结果,然后从不匹配该值的行中进行SELECT,以及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;但是,我想知道是否还有其他方法可以完成这场比赛? 最佳答案 我认为您的第二个解决方案是做您想要的事情的标准方法。我会用同样的方式做。您还正确添加了INDEX composite_key 。但是,您可以添加一个附加的GROUP BY来避免同一assoc.ref1出现的次数与联接查找与ref2 1000的关联行的次数相同:SELECT assoc.ref1 FROM assoc JOIN assoc AS `set` ON assoc.ref1 = `set`.ref1 WHERE assoc.ref2 = 1000 AND `set`.ref2 <> 1000 GROUP BY assoc.ref1;关于mysql - 当多行之间的列是否相等时匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15975869/ 10-10 13:17