Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个列的SQL Case_Sql_Sqlite_Select_Join_Case - Fatal编程技术网

具有多个列的SQL Case

具有多个列的SQL Case,sql,sqlite,select,join,case,Sql,Sqlite,Select,Join,Case,您好,我已经通过多栏问题查看了该案例,但没有看到与此相同的内容,因此我想我应该问一下 基本上我有两个表,它们都是我想要连接的子查询的结果。它们具有相同的列名。如果我在他们的ID上加入他们并选择*我得到的每一行都是这样的: 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来自哪个。此外,如果两个表的结果

您好,我已经通过多栏问题查看了该案例,但没有看到与此相同的内容,因此我想我应该问一下

基本上我有两个表,它们都是我想要连接的子查询的结果。它们具有相同的列名。如果我在他们的ID上加入他们并选择*我得到的每一行都是这样的:

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来自哪个。此外,如果两个表的结果相等,则两个表的结果都可以

选择CASE WHEN A.num 这很好,但是在一个CASE语句中只能返回一列,我可以为每列使用一个CASE,但这看起来太浪费了,在我的实际数据库中,每个表中有8个CASE语句,所以我将有8个CASE语句

这是SQLite顺便说一句。任何帮助都将不胜感激

有关A和B的更多信息,请编辑: A和B来自这样的查询

选择思考案例陈述可能从这里开始

从表1 a中选择id、x、y、z、num将a.id=b.id上的表2 b与53348574-3593和53348574+3593之间的y以及-6259973-6027和-6259973+6027之间的z通过a.id、c.r a将c.id=b.id组上的表3 c连接起来

加入

从表1 a中选择id、x、y、z、num将a.id=b.id上的表2 b和53401007-3593和53401007+3593之间的y以及-6397286-6027和-6397286+6027之间的z通过a.id将c.id=b.id上的表3 c和a.id=b.id上的c.r b组连接起来


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

我不知道有哪一个RDBMS支持您想要的数据。你必须写8个案例陈述。但为什么这么浪费呢?还是你只是懒惰

编辑:

请参见,当您写入时,请选择*。。。RDBMS所做的是查询系统表信息、模式等,并获取表中的列列表。 所以当你写作的时候

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
不幸的是,这是错误的语法

试试看

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

@Tichodroma@Tichodroma它确实支持CASE,它不在该页面上,因为CASE是一个表达式。请看这里:我认为这是浪费,因为这意味着一直在计算8个Case表达式,而不是1:p。这看起来很糟糕,而且对可维护性来说也不太好。即使你的*东西可以工作,也会计算所有8个Case表达式。仅仅因为你写了一条,并不意味着只有一条。不知道enter会发送评论,所以在我编辑时请容忍我。。。所以选择CASE WHEN A.num