У меня есть две таблицы, и я хочу выбрать строку из таблицы_2 с разными значениями из строки занятости в таблице_1, чтобы показать таблицу с зарегистрированными жалобами без использования номера, я попробовал этот оператор SQL:

SELECT * FROM krita_db, sjofor_db WHERE employing_nr != nr ORDER BY id DESC

Но получите 3 из той же строки, если

+----+--------------+-------------------------------------+
| id | employing_nr |              complaint              |
+----+--------------+-------------------------------------+
|  1 |          123 | something bad                       |
|  2 |          333 | you have to do something with this  |
+----+--------------+-------------------------------------+

+----+-----+------+---------+----------+
| id | nr  | navn | adresse |   tlf    |
+----+-----+------+---------+----------+
|  1 | 123 | ola  | ---     | 12345678 |
|  2 | 321 | kari | ---     | 98765432 |
|  3 | 222 | gerd | ---     | 12344321 |
+----+-----+------+---------+----------+ 

Я просто хочу показать одну и ту же жалобу, а не 3 раза, как я могу это сделать?

Теперь с моим кодом я получаю эту таблицу:

+----+--------------+--------------------------------------+
| id | employing_nr |              complaint               |
+----+--------------+--------------------------------------+
|  1 |          123 | something bad                        |
|  1 |          123 | something bad                        |
|  2 |          333 | you have to do something with this   |
|  2 |          333 | you have to do something with this   |
|  2 |          333 | you have to do something with this   |
+----+--------------+--------------------------------------+

Я хочу показать это, жалобу с employing_nr, которая не зарегистрирована:

+----+--------------+--------------------------------------+
| id | employing_nr |              complaint               |
+----+--------------+--------------------------------------+
|  2 |          333 | you have to do something with this   |
+----+--------------+--------------------------------------+
0
newbees 29 Май 2018 в 06:35

3 ответа

Лучший ответ

Старайтесь избегать неявных объединений в запросе.

Вы можете попробовать EXIST , как показано ниже

SELECT  * 
FROM krita_db 
WHERE NOT EXISTS (
  SELECT 1 FROM sjofor_db
  WHERE krita_db.employing_nr = sjofor_db.nr)

скрипка

Кроме того, вы можете получить те же результаты, используя ответ Hoàng Đăng (LEFT JOIN + NULL проверка)

2
an33sh 30 Май 2018 в 03:52

Попробуй это

Select * FROM krita_db LEFT JOIN sjofor_db ON employing_nr = nr ORDER BY krita_db.id DESC

Я предполагаю, что таблица с complaint является krita_db

0
Hoàng Đăng 29 Май 2018 в 03:45

Вы можете просто использовать SELECT DISTINCT вместо SELECT. Это удалит все ваши дублирующиеся строки.

0
Geoff Hacker 29 Май 2018 в 04:09