我有一个包含大量列和行的表。我遇到的问题是我想选择某个列并获取包含所有非空值的行。
我的(到目前为止)正确的陈述如下:
SELECT *
FROM table_name
WHERE col_1 = "Apotheken"
这将返回包含其所有(非)值的正确行。 但是如何从这一行中获得非空值?我可以这样写:
SELECT *
FROM table_name
WHERE col_1 = "Apotheken"
AND col_2 IS NOT NULL
AND col_3 IS NOT NULL
...
AND col_n IS NOT NULL
正如我所说,有太多列。有没有办法只选择具有实际值的列?
提前致谢!
答案 0 :(得分:0)
你可以这样做,这将节省一些打字:
SELECT *
FROM table_name
WHERE col_1 = "Apotheken"
AND (col_2 + col_3 + col_4 + ... + col_n) IS NOT NULL
或作为多种用途的视图:
SELECT *
FROM table_name
WHERE (col_2 + col_3 + col_4 + ... + col_n) IS NOT NULL
答案 1 :(得分:0)
创建视图
您可以创建一个VIEW
来摆脱在您编写的每个查询中输入这些条件。
CREATE VIEW view_table_not_null AS (
SELECT *
FROM table
WHERE col_1 IS NOT NULL
AND col_2 IS NOT NULL
AND col_N IS NOT NULL
);
然后您可以SELECT
VIEW
WHERE ... IS NOT NULL
而无需在每个查询中写NOT NULL
即可免费获取VIEW
。创建一次,随处使用。经典SELECT *
FROM view_table_not_null
WHERE col_3 = 'Apotheken';
。
ALTER TABLE column_4 SET NOT NULL;
将列更改为NOT NULL
$args->hasChangedField('public')