1

嗨,我查看了“多列案例”问题,没有看到与此相同的内容,所以我想我应该问一下。

基本上我有两个要加入的表(都是子查询的结果)。它们具有相同的列名。如果我加入他们的 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 来自这样的查询

选择“认为案例陈述可能会在这里” 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)) 加入表 3 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)) 加入表 3 c ON c.id= b.id GROUP BY a.id, cr ) B ON A.id=B.id

因此,如果您想知道为什么数字很大,它会连接两个基于地理位置制作的表,并且需要根据在任一位置找到的属性来决定从哪个表中获取数据。

4

2 回答 2

1

我不知道任何支持您想要的 RDBMS。您将必须编写 8 个 CASE 语句。但是为什么这么浪费呢?还是你只是懒惰?:)

编辑:

看,当您编写SELECT * ...RDBMS 时,您正在做的是查询系统表(information_schema 等)并获取表中的列列表。所以当你写

SELECT CASE WHEN A.num < B.num THEN A.* ELSE B.* END ...

你基本上写

SELECT CASE WHEN A.num < B.num THEN A.num, A.whatever, A.more, ... ELSE B.num, B.whatever, B.more... END FROM A JOIN B ON A.id=B.id

不幸的是,这是错误的语法。

于 2012-10-05T12:47:56.273 回答
1

尝试

select A.id, A.x, A.y, A.z, A.num from  A JOIN B ON A.id=B.id where a.num<b.num
union
select b.id, b.x, b.y, b.z, b.num from  A JOIN B ON A.id=B.id where b.num<a.numhere
于 2012-10-05T12:49:01.237 回答