#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 |
-----