Страница: 1 |
Страница: 1 |
Вопрос: Помоигите составить sql-запрос
Добавлено: 31.07.09 00:51
Автор вопроса: Zahar | Web-сайт:
В БД имеется три таблицы : A, B, C, в каждой из которых всего по одному полю с именем F
В столбцах содержатся различные значения (скажем, цифровые), причём в каждом отдельном столбце они не повторяются, но могут совпадать со значениями в других столбцах.
Как составить запрос, чтобы получить таблицу результатов из трёх столбцов (А1, B1, C1), в каждом из которых останутся лишь те значения из соответствующих таблиц, которые имеют хотя бы одну пару в других столбцах.
Для того, чтобы было понятнее:
Имеется три таблицы с одним полем в каждой:
А.F B.F C.F
123 116 89
176 134 110
238 176 123
293 215 150
389 370 176
395 478 289
478 490 490
567 511
558
Должно получиться:
A1 B1 C1
123 176 123
176 478 176
478 490 490
Помогите профану. Нутром чую, что решение - элементарно, но как не пробую - не получается.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #1
Добавлено: 31.07.09 13:28
Таблицы допустим называются А, Б, С.
Select A.F, B.F, C.F From A, B, C, Where A.F = B.F or B.F = C.F or A.F = C.F
Запрос по идеи должен работать сам не тестил, можно конечно с объединением написать но так более понятнее будет.
Номер ответа: 2
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #2
Добавлено: 01.08.09 00:30
Это первое, что пришло в голову мне. Но при тестировании выводит гигантские списки, почему-то. Наверное SQL в данном случае расценивает OR как-то по своему, ни так как думается нам. Надо что-то другое. Помогите, гуру, плз.
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 01.08.09 13:36
Потому, что выборка делается из всех троек по F, т.е. из таблицы длиной count(A.*) * count(B.*) * count(C.*). Вот если ты укажешь условия, с которыми можно объединять записи в тройку, тогда и запрос можно будет составить получше.
Номер ответа: 4
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #4
Добавлено: 01.08.09 16:17
Посмотрел повнимательнее этот запрос. Тут прикол в том что при совпадении чисел в двух столбцах третий столбец надо обнулять и не воспринимать его, а вот как это сделать пока не придумал или как по хитрому условие поставить.
Номер ответа: 5
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #5
Добавлено: 01.08.09 16:49
Немного схитрил но выдаёт то что надо, только там где ненадо стоит 176 и есть одна общая строка на 3 столбца 176 176 176
Номер ответа: 6
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #6
Добавлено: 01.08.09 16:50
SELECT A.F AS A, B.F AS B, C.F AS C
FROM A CROSS JOIN
B CROSS JOIN
C
WHERE (C.F = 176) AND (A.F = B.F) OR
 A.F = 176) AND (B.F = C.F) OR
 A.F = C.F) AND (B.F = 176)