【发布时间】:2012-09-26 14:51:24
【问题描述】:
您好,我查看了“多列案例”问题,没有看到与此相同的内容,所以我想我应该问一下。
基本上我有两个要加入的表(都是子查询的结果)。它们具有相同的列名。如果我加入他们的 id 和 SELECT * 我会得到每一行是这样的:
A.id, A.x, A.y, A.z, A.num, B.id, B.x, B.y, B.z, B.num
我想要的是一种只选择 num 值较低的表列的方法。所以在这种情况下,结果表总是有 5 列,id, x, y, z, num,我不在乎id, x, y, z, num 事后来自哪个表。如果它们相等,任何一个表结果都可以。
SELECT CASE WHEN A.num < B.num THEN A.* ELSE B.* END FROM A JOIN B ON A.id=B.id
会很完美,但你只能在 CASE 语句中返回一列,我可以为每一列使用 CASE,但这似乎很浪费(我的实际数据库中的每个表中有 8 个,所以我会有 8 个 CASE 语句)。
这是 SQLite 顺便说一句。任何帮助将不胜感激!
编辑以获取有关 A 和 B 的更多信息: A 和 B 来自这样的查询
SELECT "认为案例陈述可能会出现在这里" FROM
(SELECT id, x, y, z, num FROM Table1 a JOIN Table2 b ON a.id=b.id AND (y BETWEEN (53348574-3593) AND (53348574+3593)) AND (z BETWEEN (- 6259973-6027) AND (-6259973+6027)) JOIN Table3 c ON c.id= b.id GROUP BY a.id, cr) A
加入
(SELECT id, x, y, z, num FROM Table1 a JOIN Table2 b ON a.id=b.id AND (y BETWEEN (53401007-3593) AND (53401007+3593)) AND (z BETWEEN (- 6397286-6027) AND (-6397286+6027)) JOIN Table3 c ON c.id= b.id GROUP BY a.id, cr ) B ON A.id=B.id
因此,如果您想知道为什么会有这么大的数字,它会连接两个基于地理位置创建的表,并且需要根据在任一位置找到的属性来决定从哪个表中获取数据。
【问题讨论】:
-
@Tichodroma sqlite.awardspace.info/syntax/sqlitepg09.htm
-
@Tichodroma 它确实支持 CASE,它不在那个页面上,因为 CASE 是一个表达式。见这里:sqlite.org/lang_expr.html
标签: sql sqlite select join case