Mysql 在案例中使用从另一个SELECT获取的字段
有没有办法让下面的工作正常Mysql 在案例中使用从另一个SELECT获取的字段,mysql,Mysql,有没有办法让下面的工作正常 SELECT (SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id) AS foos CASE WHEN foos <= 0 THEN 0 WHEN foos > 0 THEN 1 END AS isFoos FROM table1 我让它工作的唯一方法是: SELECT (SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id)
SELECT
(SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id) AS foos
CASE
WHEN foos <= 0 THEN 0
WHEN foos > 0 THEN 1
END
AS isFoos
FROM table1
我让它工作的唯一方法是:
SELECT
(SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id) AS foos
CASE
WHEN (SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id) <= 0 THEN 0
WHEN (SELECT COUNT(foo) FROM table2 WHERE table1.id = table2.id) > 0 THEN 1
END
AS isFoos
FROM table1
而且看起来非常可怕
请注意,该示例没有描述我有问题的SQL查询,它描述了我希望从查询中获得的语法
谢谢:
编辑:修复SQL以更好地解释问题
编辑2:这是小提琴,我希望它能有所帮助
小提琴包含产品和生产线。产品可以在多条生产线中生产,生产线可以生产多个产品
连接的pr_显示应使用产品的线数,选择计数显示实际使用产品的线数
我使用的数据库有一些缺陷,由于上面写的代码太多,无法修复
SELECT IF(COUNT('foo') > 0, 1, 0) as `isFoos` FROM `table1`
或
希望这有助于:
select email,
case
when count(email) > 2 then 55
when count(email) < 2 then 33
end
as cc
from supportContacts
group by email
我在这里放置了一个SQL FIDLE我将根据您的更新和SQLFIDLE使用新的查询。我将使用一个子查询,但只使用一个COUNT*聚合函数,它将得到与您相同的结果
SELECT pr_id, pr_name, connected,
CASE
WHEN connected <= 0 THEN "RED"
WHEN connected < pr_connected THEN "YELLOW"
WHEN connected >= pr_connected THEN "GREEN"
END as Status
FROM (
SELECT pr_id, pr_name, pr_connected,
( SELECT COUNT(pl_id) FROM product_line WHERE pl_product_id = pr_id) AS connected
FROM product
GROUP BY pr_name
) tt
检查我的这就是为什么我说我需要这个精确的查询才能工作。我知道在这种情况下我可以使用IF,但在我的代码中它不起作用。对不起,我的SQL似乎没有很好地解释这个问题。请检查编辑过的SQL。你能不能创建一个类似我上面的提琴,带有示例表结构和一些数据,这样我们就可以计算出来。我看不出你们的桌子有什么关系。当然,要等到下周。不客气@TeroHeiskanen。很高兴能帮上忙。祝您编码愉快,上帝保佑。我想知道我为每种情况选择的原始解决方案与您的解决方案之间是否存在性能差异?我不介意SQL查询的外观,只要它性能良好。@TeroHeiskanen我的更快检查视图执行计划SQLFIDLE。
SELECT pr_id, pr_name, connected,
CASE
WHEN connected <= 0 THEN "RED"
WHEN connected < pr_connected THEN "YELLOW"
WHEN connected >= pr_connected THEN "GREEN"
END as Status
FROM (
SELECT pr_id, pr_name, pr_connected,
( SELECT COUNT(pl_id) FROM product_line WHERE pl_product_id = pr_id) AS connected
FROM product
GROUP BY pr_name
) tt