Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка * из таблицы1, кроме тех строк, которые есть таблице2 / 9 сообщений из 9, страница 1 из 1
13.02.2020, 15:52
    #39926310
Mikha38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Приветствую!
Дано:
1) Таблица№1 100noun . столбцы eng , rus .
2) Таблица№2 user_vocabular столбцы eng , rus , engtorus , user_id

Найти:
Выборка всех строк из 100noun, кроме тех где 100noun.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1

Я додумался только до этого, но тут результат в точности противоположный, что мне нужен. По сути мне нужно получить все строки из 100noun кроме тех, что в выборке ниже:
" SELECT * FROM 100noun, user_vocabular WHERE 100noun.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1"

Или совсем простым языком надо так:
" SELECT * FROM 100noun(строки только из этой таблицы) КРОМЕ 100noun.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1"
...
Рейтинг: 0 / 0
13.02.2020, 16:53
    #39926353
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Покажите лучше пример - исходные данные и результат (и чтобы каждое условие хоть раз "стрельнуло"). Ещё лучше - создайте fiddle и дайте для него требуемый результат.
...
Рейтинг: 0 / 0
13.02.2020, 18:11
    #39926377
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
-- I вариант
SELECT `100noun`.eng FROM
(
SELECT 1 AS eng UNION ALL
SELECT 1 AS eng UNION ALL
SELECT 3 AS eng UNION ALL
SELECT 4 AS eng
) AS `100noun`
LEFT JOIN
(
SELECT 1 AS eng, 1 AS engtorus, 1 AS user_id UNION ALL
SELECT 1 AS eng, 0 AS engtorus, 2 AS user_id UNION ALL
SELECT 2 AS eng, 1 AS engtorus, 3 AS user_id UNION ALL
SELECT 3 AS eng, 2 AS engtorus, 4 AS user_id
) AS user_vocabular
ON `100noun`.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1
WHERE user_vocabular.eng IS NULL;

-- II вариант
SELECT `100noun`.eng FROM
(
SELECT 1 AS eng UNION ALL
SELECT 1 AS eng UNION ALL
SELECT 3 AS eng UNION ALL
SELECT 4 AS eng
) AS `100noun`
WHERE NOT EXISTS (SELECT 1 FROM
(
SELECT 1 AS eng, 1 AS engtorus, 1 AS user_id UNION ALL
SELECT 1 AS eng, 0 AS engtorus, 2 AS user_id UNION ALL
SELECT 2 AS eng, 1 AS engtorus, 3 AS user_id UNION ALL
SELECT 3 AS eng, 2 AS engtorus, 4 AS user_id
) AS user_vocabular
WHERE `100noun`.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1
);
...
Рейтинг: 0 / 0
14.02.2020, 00:11
    #39926506
Mikha38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Ну или я чёт не въезжаю, ну короче не работает так.

В приложении указаны таблицы со строками.
Красным шрифтом выделено то, что нужно получить в результате выборки. На жёлтом фоне те значения которые отсеиваются.

Я решил части проблему таким запросом:
("SELECT * FROM 100noun LEFT OUTER JOIN user_vocabular ON 100noun.eng = user_vocabular.eng WHERE user_vocabular.engtorus IS NULL ");
Но у меня изначально значения 0 и 1, можно переделать бд где 0 заменить на NULL, но в душе свербит, что я как программист пошёл по легкому пути говнокода.

А такая строка не работает: и ХЗ по чему, с NULL работает, а с INT вот те нате уже нет!
("SELECT * FROM 100noun LEFT OUTER JOIN user_vocabular ON 100noun.eng = user_vocabular.eng WHERE user_vocabular.engtorus = '1'");
...
Рейтинг: 0 / 0
14.02.2020, 00:27
    #39926509
Mikha38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Финальная выборка из приложеной картинки xxx2,xxx4,xxx5,xxx6,xxx7,xxx8,xxx9

(нет xxx1 и xxx3 потому что в таблице user_vocabular в строках с такими значениями, в столбце engtorus значения = 1 (Единица)
...
Рейтинг: 0 / 0
14.02.2020, 00:28
    #39926510
Mikha38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
1
...
Рейтинг: 0 / 0
14.02.2020, 08:24
    #39926547
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Mikha38
WHERE user_vocabular.engtorus IS NULL
Вы не то поле на NULL проверяете.
...
Рейтинг: 0 / 0
14.02.2020, 13:01
    #39926667
Mikha38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Как не то то?)) Ты видимо не понял условия задачи, вначале поста посмотри. Ну или напиши конкретное названия поля. Ну давайте ребзя, ещё вариантики поднакидайте, у меня сегодня ДР!)
...
Рейтинг: 0 / 0
14.02.2020, 19:41
    #39926900
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
entrypoint
Код: sql
1.
2.
ON `100noun`.eng = user_vocabular.eng AND user_vocabular.engtorus = 1 AND user_vocabular.user_id = 1
WHERE user_vocabular.eng IS NULL;

Mikha38
ON 100noun.eng = user_vocabular.eng WHERE user_vocabular.engtorus IS NULL
Коллега entrypoint предлагает проверять то поле, по которому идет соединение - user_vocabular.eng, что правильно. Оно будет NULL только тогда, когда в правой таблице не нашлось подходящей записи.
А вы проверяете почему-то user_vocabular.engtorus.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка * из таблицы1, кроме тех строк, которые есть таблице2 / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]