Как вернуть различные значения, соответствующие условиям в 1 строке?

#mysql #sql

Вопрос:

ЗАКАЗЫ T1

 ID       CID      STATUS    COUNTRY
01       1        1         3
02       2        7         NULL
03       1        1         2
04       4        NULL      -1
05       6        -1        3
06       1        3         2
07       4        2         4
 

Мне нужно найти все CID (идентификатор клиента), у которых есть заказы со статусом = «1», И указано ОБРАТНОЕ.
Из набора данных выше должен быть возвращен CID 1 (у CID 1 несколько заказов, но мне просто нужно вернуть только CID, который соответствует условиям хотя бы в одном заказе, а не во всех его заказах)

Я попробовал это:

 SELECT DISTINCT CID
FROM ORDERS
WHERE Status = '1' AND CONTRY IS NOT NULL AND COUNTRY != -1
 

Но это совсем не работает.

Комментарии:

1. But is doesn't work at all. что не работает? Можете ли вы включить как текущий, так и ожидаемый результат?

2. Мне нужно найти все CID (идентификатор клиента), у которых есть заказы со статусом = » 1 » И указана СТРАНА. В той же строке? или STATUS = '1' и COUNTRY != -1 может встречаться в 2 разных строках с одним и тем же CID?

3. ВЫБЕРИТЕ ОТДЕЛЬНЫЙ ИДЕНТИФИКАТОР CID ИЗ ЗАКАЗОВ, ГДЕ Статус = «1», А КОНТРАСТ > 0 (пожалуйста, попробуйте этот вариант).

4. Похоже на опечатку — U пропущено .. CONTRY IS NOT NULL .. . С другой стороны, COUNTRY != -1 делает проверку на наличие нулевого превышения, и его вообще можно удалить.

Ответ №1:

Для меня это прекрасно работает. Просто будь осторожнее…

 DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,cid INT NOT NULL
,status INT NULL
,country INT NULL
);

INSERT INTO my_table VALUES
(1 ,      1   ,     1      ,   3),
(2 ,      2   ,     7      ,   NULL),
(3 ,      1   ,     1      ,   2),
(4 ,      4   ,     NULL   ,   -1),
(5 ,      6   ,     -1     ,   3),
(6 ,      1   ,     3      ,   2),
(7 ,      4   ,     2      ,   4);

SELECT DISTINCT cid FROM my_table WHERE status = 1 AND country != -1;
 ----- 
| cid |
 ----- 
|   1 |
 -----