mySQL:如何从列表中的表中进行选择,而不是从另一个列表中进行选择

mySQL:如何从列表中的表中进行选择,而不是从另一个列表中进行选择,mysql,select,Mysql,Select,是否可以从一个表中选择值,这些值不存在于一个列表中,但存在于另一个列表中。。。或者他们反过来 例如 没有仔细考虑,但发现了2个语法错误。试一试 SELECT COUNT(g.`property`) as `number`, g.`property` FROM `foo` g WHERE `theID` IN (SELECT `theID` FROM `tableofIDS` WHERE `theID` = '54252') AND `theID` NOT EXISTS (SELECT `theI

是否可以从一个表中选择值,这些值不存在于一个列表中,但存在于另一个列表中。。。或者他们反过来

例如


没有仔细考虑,但发现了2个语法错误。试一试

SELECT COUNT(g.`property`) as `number`, g.`property` FROM `foo` g WHERE `theID` IN (SELECT `theID` FROM `tableofIDS` WHERE `theID` = '54252') AND `theID` NOT EXISTS (SELECT `theID` FROM `anotherTableofIDS` WHERE `theID` = '54252')
编辑:将
不在
中更改为
不存在

SELECT COUNT(g.`property`) as `number`, g.`property`
FROM `foo` g
WHERE `theID` IN (SELECT `theID` FROM `tableofIDS` WHERE `theID` = '54252')
  AND `theID` NOT IN (SELECT `theID` FROM `anotherTableofIDS` WHERE `theID` = '54252')
GROUP BY g.`property`
或者,您可以使用性能更好的联接:

SELECT COUNT(g.`property`) as `number`, g.`property`
FROM `foo` g JOIN (
    SELECT `theID`
    FROM `tableofIDS`
    WHERE `theID` = '54252'
   ) id1 ON g.theID = id1.theID
  LEFT JOIN (
    SELECT `theID`
    FROM `anotherTableofIDS`
    WHERE `theID` = '54252'
  ) id2 ON g.theID = id2.theID
WHERE id2.theID IS NULL
GROUP BY g.`property`

我想你要找的可能就是这个:

SELECT COUNT(g.property) as `number`, g.property FROM foo g JOIN tableofIDs i USING (theID) RIGHT JOIN anothertableofIDs x USING (theID) WHERE g.theID = '54252' AND x.theID IS NULL GROUP BY g.property 选择COUNT(g.property)作为'number', g、 财产 来自福格 使用(theID)连接tableofIDs i 使用(theID)右键连接另一个表OFID x 其中g.theID='54252' x.theID为空 按g属性分组
+1“连接”方法实际上是更好的方法。将要编辑我的答案以包含它。@Wise驴-注意这两个答案都有一个GROUP BY子句..MySQL没有将其作为必需子句,这对新手查询编写者是一种伤害。您应该试着习惯于编写GROUP BY子句,因为其他数据库都需要GROUP BY子句。@leslie实际上OP的查询会抛出一个错误
将GROUP与GROUP列混合是非法的bla bla bla
,因为即使是MySql也会在使用列和聚合函数的查询时出错,而且没有group by。那么是哪一个子句…MySQL为您提供了一些子句,我认为它是group by…hhmmmmmm?@leslie当您
选择键时,表中的值按键分组
,其他RDBMS错误指出,在值列周围需要一个
MIN()
MAX()
。。然而,MySql不会出错,并且会随机选取一行。(除非启用了
ONLY_FULL_GROUP_BY
) SELECT COUNT(g.property) as `number`, g.property FROM foo g JOIN tableofIDs i USING (theID) RIGHT JOIN anothertableofIDs x USING (theID) WHERE g.theID = '54252' AND x.theID IS NULL GROUP BY g.property