如果我有一个包含以下数据的数据库表t1
:
如何只选择包含术语“false”
的列 a | b | c | d
------+-------+------+------
1 | 2 | 3 | 4
a | b | c | d
5 | 4 | 3 | 2
true | false | true | true
1 | 2 | 3 | 4
a | b | c | d
5 | 4 | 3 | 2
true | false | true | true
1 | 2 | 3 | 4
a | b | c | d
5 | 4 | 3 | 2
true | false | true | true
由于
答案 0 :(得分:4)
假设您要从包含“false”的任何列中选择所有内容,这意味着您希望在这种情况下从列b
中选择所有内容:
即使有可能以某种方式 - 尽管我无法想到一个解决方案 - 但这将严重违反关系概念。当你进行选择时,你总是应该事先知道 - 这意味着在设计时,而不是在运行时 - 哪个,特别是你应该得到多少列。特定于数据的列数不是关系数据库的方式。
答案 1 :(得分:2)
我担心最好的方法是编写一些过程代码来从表中选择所有行,并在每一行检查数据以查看哪些值与您的条件匹配。通过将其名称添加到集合来记住包含匹配值的列。
完成完整,痛苦的表扫描后,您的设置将包含您需要的列名。
如果有一种方法可以通过某种类似元的SQL查询来选择列,我会感到惊讶,但是人们永远不会知道PostgresQL。有时你必须在程序上做一些事情,这个听起来像就像其中一个案例。
答案 2 :(得分:1)
我是一名SQL Server人员,所以不确定如何做到这一点。我会使用游标迭代表中的每个字段,如果找到值,则将列名插入结果表中。
您可以从表中获取列名:
SELECT column_name
FROM information_schema.columns
WHERE table_name='t1'
我认为这应该是确定单个字段是否包含“错误”的最快方法:
SELECT exists (SELECT 1 FROM t1 WHERE a = 'False' LIMIT 1);
所以你应该能够设置一个脚本来使用这两个位来自动化过程。
我也找到了这个可能有用的答案:How to search a specific value in all tables