PSEUDO:Czy istnieje sposób sprawdzania wartości zerowej we wszystkich kolumnach w wyborze wieloznacznym?
select * from foo where [every column is not null]
Czy istnieje sposób to zrobić bez podania rzeczywistych nazw kolumn?
PSEUDO:Czy istnieje sposób sprawdzania wartości zerowej we wszystkich kolumnach w wyborze wieloznacznym?
select * from foo where [every column is not null]
Czy istnieje sposób to zrobić bez podania rzeczywistych nazw kolumn?
Możliwym rozwiązaniem, które mogę myśleć polega na wykorzystaniu dynamicznego SQL
SELECT GROUP_CONCAT(column_name SEPARATOR ' IS NOT NULL AND ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND table_name = 'foo'
GROUP BY table_name;
SET @sql = CONCAT('SELECT * FROM foo WHERE ', @sql, ' IS NOT NULL');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Oto SQLFiddle demo
Oczywiście może to być opakowane w procedurze przechowywanej z parametrem dla tabeli o nazwie
DELIMITER $$
CREATE PROCEDURE sp_select_all_not_null(IN tbl_name VARCHAR(64))
BEGIN
SELECT GROUP_CONCAT(column_name SEPARATOR ' IS NOT NULL AND ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND table_name = tbl_name
GROUP BY table_name;
SET @sql = CONCAT('SELECT * FROM ', tbl_name, ' WHERE ', @sql, ' IS NOT NULL');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
DELIMITER ;
a następnie użyć go
CALL sp_select_all_not_null('foo');
Oto SQLFiddle demo dla tego
ah ... to bardzo fajne. Spróbuję. Dzięki. –
@ Dr.Dredel Serdecznie zapraszamy :) Daj się zakręcić. Możesz również rzucić okiem na przykład na sqlfiddle, który opublikowałem. – peterm
nie boi - masz je wszystkie wymienić. –
Po prostu pytanie, dlaczego nie znasz nazw swojego stołu? – bugwheels94
@Ankit, Jak to się dzieje, pracuję z tabelą dynamiczną, która może mieć wszystkie rodzaje kolumn i różnego rodzaju nazwy. Oczywiście mogę skonstruować skomplikowany i brzydki ciąg znaków AND, ale miałem nadzieję, że tego uniknę (i myślę, że masz na myśli nazwy moich kolumn). –