/ / Jak używać warunku IF w zapytaniu select, aby wyświetlić kolumnę, która nie jest pusta - mysql, if-statement

Jak używać warunku IF w zapytaniu select, aby wyświetlić kolumnę, która nie jest pusta - mysql, if-statement

Chcę wyświetlić kolumnę w kwerendzie wyboru zgodnie z następującym:

1- Jeśli wynik nie jest zerowy, wyświetl kolumnę.

2- Jeśli wynik jest zerowy, nie wyświetlaj kolumny.

Próbowałem tego, ale to nie działa, wyświetla cały czas kolumnę (zero lub nie ma wartości null)

select
if(surname  is null,"",surname) as surname
from my_table

Odpowiedzi:

0 dla odpowiedzi № 1

Jeśli nadal chcesz przykład ... tutaj jest.
B.T.W. ten przykład ma wiele kolumn (id i givenname). Jeśli masz tylko kolumnę z jedną nazwą, możesz zrobić to zupełnie inaczej, ale zależy to od reszty twojego "skryptu", jak byś to zrobił. (ponieważ selekcja nie zwróci ŻADNYCH kolumn w tym przypadku, a to jest nieprawidłowe dla wybranych)

Dane

CREATE TABLE my_table(
id int(11) NOT NULL AUTO_INCREMENT,
surname VARCHAR(20),
givenname VARCHAR(20),
PRIMARY KEY (id)
);

INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", null),
(null, null),
("and sombody else", null);

Dynamiczny SQL

SET @nr_names = (SELECT COUNT(*) FROM my_table WHERE NOT(surname IS null));
SET @fields = (SELECT if(@nr_names=0, "id, givenname", "id, givenname, surname"));
SET @query = CONCAT("select ", @fields, " from my_table");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Spowoduje to

1   me
2   you
3   (null)
4   and sombody else

Odbieranie danych do

INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", "works"),
(null, null),
("and sombody else", null);

Dostajesz

1   me                (null)
2   you               works
3   (null)            (null)
4   and sombody else  (null)

Praca z Fiddle SQL.
(niestety SQL Fiddle nie jest taki, jak dawniej z brakiem prędkości w dzisiejszych czasach)

Nie mogę już używać SQL Fiddle do pracy. Oto alternatywa: RexTester
Zobacz, nie ma kolumny nazwisko. Zmień jedną wartość zerową na tekst w danych wstawiania i kliknij "Uruchom".


0 dla odpowiedzi nr 2

Edytowane zgodnie z komentarzem

Jeśli chcesz wyświetlić kolumnę nazwiska, jeśli jedna lub więcej wartości NIE ma wartości NULL, możesz użyć następującej instrukcji IF / ELSE:

IF (SELECT COUNT(last_name) from people) > (0)
SELECT first_name, last_name from people;
ELSE
SELECT first_name from people;

Zauważ, że nie sprawdzasz, czy wartość "IS NULL" lub "value = NULL" w klauzuli WHERE instrukcji COUNT - MSSQL i zakładam, że również inne wersje, nie policz "null" jako wartość.

Schemat 1 (dla IF / ELSE powyżej):

create table people (first_name varchar(20), last_name varchar(20));
insert into people (first_name, last_name) values ("Mary", "Smith");
insert into people (first_name, last_name) values ("Mark", "Jones");
insert into people (first_name, last_name) values ("Michael", null);

Schemat 2, z IF / ELSE, jeśli chcesz go uruchomić:

create table people_no_surnames (first_name varchar(20), last_name varchar(20));
insert into people_no_surnames (first_name, last_name) values ("Mary", null);
insert into people_no_surnames (first_name, last_name) values ("Mark", null);
insert into people_no_surnames (first_name, last_name) values ("Michael", null);

IF (SELECT COUNT(last_name) from people_no_surnames) > (0)
SELECT first_name, last_name from people_no_surnames;
ELSE
SELECT first_name from people_no_surnames;

Pierwszy schemat zwróci obie kolumny (uwaganadal będzie NULL w kolumnie nazwisko, więc jeśli chcesz zastąpić go pustym ciągiem, musisz to umieścić w instrukcji SELECT), drugi schemat zwraca tylko kolumnę first_name.

Mam nadzieję że to pomoże!