MySQL выделяет все строки, но исключает одно и то же значение - PullRequest
2 голосов
/ 26 июня 2019

Все у меня есть таблица в MySQL, как показано ниже.

+---------+-------------+---------------+
| item_no | item_name   | item_location |
+---------+-------------+---------------+
| ITM145  |  laptop     | USA           |
| ITM146  |  camera     | USA           |
| ITM147  |  cd         | USA           |
| ITM148  |  phone      | USA           |
| ITM149  |  cd         | France        |
| ITM150  |  phone      | France        |
+---------+-------------+---------------+

Последнее местоположение предметов буксировки - Франция, и те же предметы, что и у меня в США, я хочу, чтобы запрос возвращал меня, как показано ниже, исключая то же значение для местоположения Франция.

+---------+-------------+---------------+
| item_no | item_name   | item_location |
+---------+-------------+---------------+
| ITM145  |  laptop     | USA           |
| ITM146  |  camera     | USA           |
+---------+-------------+---------------+

Первая попытка

SELECT * FROM table
WHERE item_location !='France'
GROUP BY item_name

СБОЙ вторая попытка

SELECT * FROM table
WHERE item_location NOT IN('France')
GROUP BY item_name

Ответы [ 4 ]

1 голос
/ 26 июня 2019

Используйте LEFT JOIN с собственной таблицей, например:

SELECT t.* FROM Table1 t
LEFT JOIN
(
  SELECT item_name FROM Table1 WHERE item_location = 'France'
) t2
ON t.item_name = t2.item_name
WHERE t2.item_name IS NULL

Вывод:

| item_no | item_name | item_location |
|---------|-----------|---------------|
|  ITM145 |    laptop |           USA |
|  ITM146 |    camera |           USA |

См. Это SQLFiddle .

Комупонять объединения см. Визуальное объяснение объединений SQL .

1 голос
/ 26 июня 2019

Попробуйте это:

SELECT * FROM table
GROUP BY item_name
Having count(*) = 1
1 голос
/ 26 июня 2019

Попробуйте вместо этого использовать оператор <> (это означает, что «Франция» опущена)

SELECT * FROM table
WHERE item_location <> 'France'
GROUP BY item_name

Но если вы хотите получить свои результаты

SELECT * FROM table
WHERE item_location <> 'France' AND item_name IN ('laptop','camera')
GROUP BY item_name

Чтобы получить результаты, исключающие item_name во Франции, вы можете попробовать это

SELECT * FROM table
WHERE item_location <> 'France' AND item_name NOT IN (Select item_name FROM 
table where item_location = 'France')
GROUP BY item_name
0 голосов
/ 26 июня 2019

вы хотите получить "ноутбук" и камера только там используйте это SELECT * FROM country WHERE item_location ="usa" AND (item_name = "laptop" OR item_name = "camera") GROUP BY item_no если вы хотите выбрать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...