Задать вопрос
@nano_e_t_4

Где ошибка в запросе?

Всем привет
есть 2 таблички, в каждой по 12 элементов - table1.items и table2.items.
значения в табличка частрично пересекаются
Хочу чтобы вывелся результат, в котором первый столбец - значения table1.items, второй столбец - значения table2.items
делаю так:
select table1.items, table2.items from table1, table2;

в итоговом выводе получается 144 строки, как я понял потому что делается первый селект (table1.items) и применяется к каждой строке table2.
пробовал делать через group by но тоже не то (честно говоря не совсем хорошо представляю работу оператора group by, сейчас как раз его изучаю)
select table1.items, table2.items from table1, table2 group by table1.items, table2.items;

Подскажите плз, где ошибка запросе или как его скорректировать
спасибо
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Оценить 6 комментариев
Пригласить эксперта
Ответы на вопрос 3
Melkij
@Melkij
PostgreSQL DBA
Если вы не указываете, как сравнивать строки таблиц между собой - вы получите декартово произведение. Каждая строка сджойнится с каждой.

Если вы хотите вывести все данные из обеих таблиц с отметками, что есть только в первой, что только во второй, а что в обеих - вам нужен full join с объединением по этому полю.
select table1.items, table2.items from table1 full join table2 using(items)
Ответ написан
Комментировать
darthunix
@darthunix
Знаю PostgreSQL, Ubuntu, DICOM и медицину.
Вы делаете кросс джоин, получая все возможные комбинации (12х12=144). Вам нужно сделать соединение по номерам строк. У меня постгреса под рукой нет, но на память типо такого
with t1_rows as (
  select row_number() over(), items from table1
),
t2_rows as (
  select row_number() over(), items from table2
)
select a.items, b.items from t1_rows a
full join t2_rows b using (row_number)
Ответ написан
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Хочу чтобы вывелся результат, в котором первый столбец - значения table1.items, второй столбец - значения table2.items делаю так:

Попробуйте так:
select table1.items, table2.items from table1 left join table2 on true

Помимо всего прочего, к запросы выше можно применять и group by и всё остальное. Но, если Вы внимательно почитаете про стандарт SQL, то поймете, что данные могут выводиться в совершенно хаотичном порядке (при отсутствии соотв. сортировки) и то, что данный запрос имеет некоторый оттенок маразма, так как данные хоть и выводятся так, как Вы сказали, но куда бы их в таком виде можно было применить, без отсутствия сопоставлений (с учётом того, что я озвучил выше) - придумать довольно таки сложно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы