Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Помоигите составить sql-запрос Добавлено: 31.07.09 00:51  

Автор вопроса:  Zahar | Web-сайт: partnerka-ru.info
В БД имеется три таблицы : 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-сайт: partnerka-ru.info
 Профиль | | #2
Добавлено: 01.08.09 00:30
Это первое, что пришло в голову мне. Но при тестировании выводит гигантские списки, почему-то. Наверное SQL в данном случае расценивает OR как-то по своему, ни так как думается нам. Надо что-то другое. Помогите, гуру, плз.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам