2016-06-23 4 views
1

Я новичок в PlSQL. У меня есть эта таблица, которая представляет соотношение между 2 таблиц:Как выбрать запись с внешним ключом с более чем значением?

ID T1Id T2Id 
-- ---- ---- 
1 1 1 
2 2 1 
3 2 2 
4 2 3 
5 3 1 
... 

У меня есть значения в 2-й колонке (T1Id), которые могли бы иметь одно или несколько значений из 3-го (одного T2Id). Мой вопрос в том, как выбрать только значения T1Id, которые имеют более 1 T1Id значение.

У вас есть идея?

+1

Что касается дизайна таблицы: это необычно, чтобы дать таблицу моста идентификатор ТИО самостоятельно; потому что это то, что вам никогда не понадобится. Поэтому я предлагаю удалить его из таблицы и сделать 't1id' +' t2id' основным ключом. (Если вы придерживаетесь идентификатора, то вам все равно придется иметь все необходимые уникальные ограничения, то есть один на 'id', один на' t1id' + 't2id'.) –

+0

@ThorstenKettner Yeap, вы правы, Я не думал об этом; благодаря – Chinovski

ответ

3

Если вы хотите только значения T1Id, где в таблице больше одного, вы можете использовать ниже.

select T1Id, count(T1Id) as countT1 from yourTable 
group by T1Id 
having count(T1Id) > 1 

Если вы хотите выбрать другие столбцы, которые вы можете использовать раздел строки для достижения этой

SELECT * 
    FROM (SELECT a.*, COUNT (*) OVER (PARTITION BY t1id) AS countT1 
      FROM yourTable a) 
WHERE countT1 > 1 
Смежные вопросы