powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка * из таблицы1, кроме тех строк, которые есть таблице2
9 сообщений из 9, страница 1 из 1
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926310
Mikha38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!
Дано:
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
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926353
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите лучше пример - исходные данные и результат (и чтобы каждое условие хоть раз "стрельнуло"). Ещё лучше - создайте fiddle и дайте для него требуемый результат.
...
Рейтинг: 0 / 0
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926377
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926506
Mikha38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну или я чёт не въезжаю, ну короче не работает так.

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

Я решил части проблему таким запросом:
("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
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926509
Mikha38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Финальная выборка из приложеной картинки xxx2,xxx4,xxx5,xxx6,xxx7,xxx8,xxx9

(нет xxx1 и xxx3 потому что в таблице user_vocabular в строках с такими значениями, в столбце engtorus значения = 1 (Единица)
...
Рейтинг: 0 / 0
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926510
Mikha38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1
...
Рейтинг: 0 / 0
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926547
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikha38
WHERE user_vocabular.engtorus IS NULL
Вы не то поле на NULL проверяете.
...
Рейтинг: 0 / 0
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926667
Mikha38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как не то то?)) Ты видимо не понял условия задачи, вначале поста посмотри. Ну или напиши конкретное названия поля. Ну давайте ребзя, ещё вариантики поднакидайте, у меня сегодня ДР!)
...
Рейтинг: 0 / 0
Выборка * из таблицы1, кроме тех строк, которые есть таблице2
    #39926900
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка * из таблицы1, кроме тех строк, которые есть таблице2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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