具有多列的 SQL 案例

标签 sql sqlite select join case

您好,我已经浏览了“多列案例”问题,但没有看到与此相同的内容,所以我想我应该问一下。

基本上我有两个我想要连接的表(都是子查询的结果)。它们具有相同的列名称。如果我加入他们的 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 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, c.r) 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, c.r ) B ON A.id=B.id

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

最佳答案

尝试

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

关于具有多列的 SQL 案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746407/

相关文章:

Sqlite 原子地读取和更新计数器?

java - 保存一些数据 sqlite、SharedPreferences 或文件?

sql - 如何格式化输出以便以句子形式输出?

c# - Linq to SQL 删除/添加子对象

java.lang.IllegalArgumentException : the bind value at index 1 is null

sql - 和 OR 在 sql server 中的同一列

mysql - 从同一列中选择多个相同值的行

mysql - 使用索引,使用临时,使用文件排序 - 如何解决这个问题?

python - Web2Py - 如何使用带有 WHERE.. IN 关键字的 SELECT 查询

php - 当用户填写字段时减少相同输入的数量