----------------------------------------
ID | field1 | field2 | field3| field4 |
----------------------------------------
1 | 1 | 0 | 1 | 0 |
----------------------------------------
2 | 0 | 1 | 0 | 1 |
----------------------------------------
我想编写一个查询,选择只有列等于= 1的记录 1.其中ID = 1
---------------------
ID | field1 | field3
----------------------
1 | 1 | 1
2。其中ID = 2
---------------------
ID | field2 | field4
----------------------
2 | 1 | 1
你们可以建议或给我一个建议,如何制作它?
非常感谢您花时间阅读我的问题。
答案 0 :(得分:3)
不,SQL不会这样做,在运行时有条件地返回列。
要返回的列集是在解析和准备SQL语句时确定的。它无法在运行时动态更改。
要获得显示的结果,我们需要两个不同的查询
SELECT t.id, t.field1, t.field3
FROM mytable t
WHERE ...
和
SELECT t.id, t.field2, t.field4
FROM mytable t
WHERE ...
我们可以为SELECT列表中的表达式提供别名,但同样,必须在SQL文本中指定这些别名;那些不能在执行时被改变。
SELECT t.id, 1 AS field2, 1 AS field4
FROM mytable t
WHERE ...
但是我们仍然需要不同的SQL文本来返回field1和field3。
似乎有2 ^ 4(1 + 4 + 6 + 4 + 1)个可能填充的字段1..4的组合。共有16个可能的SELECT列表。
我们可以运行一个prequery,找出应该返回哪个fieldN,并使用该查询的结果来表示第二个查询的文本。
但要做到这一点所需的严谨性似乎并不合理。
答案 1 :(得分:0)
您必须使用WHERE条件来SELECT值。将表名称视为表1。
SELECT * FROM Table1 WHERE ID = 1
如果要从多个ID中进行选择,可以使用IN子句。
SELECT * FROM Table1 WHERE ID IN (1,2)
如果你只想要Field1,Field3那么只需在SELECT查询中提及它们。你不需要*,它对应于所有领域。
SELECT Field1, Field3 FROM Table1 WHERE ID = 1