mysql - SQL SELECT 子句列添加行?

标签 mysql sql

我无法相信我所目睹的一切。在不得不处理这个简单的查询之后,我必须重新考虑我所有的知识和 10 年的 SQL 经验:

SELECT CASE 
        WHEN SUM(COALESCE(lids_sids.counter, 0)) - SUM(COALESCE(lids_sids.leaved, 0)) > 0 
            THEN '1' 
            ELSE '2' 
        END as connected
FROM books
JOIN `lines` as l ON books.lid = l.id
LEFT JOIN lids_sids ON l.id = lids_sids.lid

即使 books.lid 不包含 lines.id,我也会得到 1 行。结果是'2'

如果我这样做:

SELECT books.id
FROM books
JOIN `lines` as l ON books.lid = l.id
LEFT JOIN lids_sids ON l.id = lids_sids.lid

我在第一个查询中也得到了 0 行

我确信只能通过设置 JOIN、WHERE、GROUP BY 子句来添加和删除行。现在我知道改变 SELECT 子句的内容可以改变行数。疯狂的 !我正在使用 mysql。

Table books.lid contains the values: 6, 207, 220, 285, 307, 326
while lines.id: 68, 69, 70, 71, 72, 73, 74
lids_sids.lid: 68

books.lid 永远不会匹配 lines.id 并且表 lids_sids 永远不应该被考虑。

最佳答案

区别在于聚合函数SUM。它将始终返回单个值/行。

如果你想做这样的事情:

SELECT SUM(books.id)
FROM books
JOIN `lines` as l ON books.lid = l.id
LEFT JOIN lids_sids ON l.id = lids_sids.lid

即使在连接的表中没有任何记录,您也会得到一个值。

关于mysql - SQL SELECT 子句列添加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569241/

相关文章:

sql - 通过SP增加MS SQL Server表中的int列

MySQL - GROUP BY - 单独评估,然后组合

mysql - 有条件地选择 MYSQL 列

php - MySQL 插入在 jQuery Mobile 中不起作用

php - 我如何根据另一个查询从 mysql 查询中排除一些记录

Mysql:重复键更新所有值?

c# - 发布应用程序时实体返回 null

c# - MySQL(和c#?)转换字符格式

mysql - 本地开发joomla与远程数据库

php - mysql如何隐藏一条记录