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