2015-03-19 3 views
0

У меня есть запросРегистрация на запрос возвращает более одной строки

SELECT id_anything FROM table1 JOIN table2 USING (id_tables) 

Теперь у меня есть ситуации, которая:

Если соединение возвращает две строки из table2 я хочу показать id_anything из таблицы 1 (только 1 строка) , и если соединение из таблицы2 возвращает 1 строку, я хочу показать id_anything из таблицы2.

Ps: id_anything из таблицы 2 возвращает различные значения

Пример данных: таблица1

id_tables | id_anything 
1   | 1 

table2

id_tables | id_anything 
1   | 10 
1   | 100 

Возврат ожидаемый: 1

+0

Пожалуйста, добавьте некоторые выборочные данные (как форматированный текст) и ожидаемый результат на основе этих данных. –

+0

Я добавил к вопросу – ledesma

ответ

0

-первых, получить значение вы можете захотеть вернуться и основа для принятия решения о том, возвратитесь вместе в одну строку.

SELECT table1.id_tables, table1.id_anything AS table1_id, MIN(table2.id_anything) AS table2_id, COUNT(*) 
    FROM table1 JOIN table2 USING (id_tables) 
    GROUP BY table1.id_tables, table1.id_anything 

Функция агрегата, которую вы используете, не имеет особого значения, поскольку вы будете использовать ее только в том случае, если она есть только одна.

Вы можете выбрать соответствующее значение:

WITH join_summary AS (
    SELECT table1.id_tables, table1.id_anything AS table1_id, MIN(table2.id_anything) AS table2_id, COUNT(*) AS match_count 
    FROM table1 JOIN table2 USING (id_tables) 
    GROUP BY table1.id_tables, table1.id_anything 
) 
SELECT id_tables, CASE WHEN (match_count > 1) THEN table1_id ELSE table2_id END AS id_anything 
    FROM join_summary 
Смежные вопросы