Запрос первичных ключей таблиц 3 без повторения в одну колонку

голоса
1

У меня есть три таблицы

TABLE A 
      A_ID (PK)
      B_ID
      X_ID
      A_NAME

TABLE B
      B_ID (PK)
      A_ID
      B_NAME

TABLE C
      C_ID (PK)
      B_ID
      C_NAME

X_ID будут присоединены к Bind переменной, на основе которого будет запрошен первичные ключи.

Я должен запросить все первичные ключи из трех таблиц без них повторяющихся в запросе результатов запроса, который я использовал

SELECT TABLEA.A_ID,TABLEB.B_ID,TABLEC.C_ID
FROM TABLEA INNER JOIN TABLE B 
ON TABLEA.A_ID= TABLEB.A_ID JOIN TABLE C
ON TABLEB.B_ID= TABLEC.B_ID
WHERE TABLEA.X_ID = :bindVariable
ORDER BY TABLEA.A_NAME

ОБНОВИТЬ:

Колонны и значения

A_ID          B_ID            C_ID        X_ID
101            201             301         1
101            201             302         1
101            202             303         2
102            202             304         2 

Но я хочу показать результат , как на основе X_ID (значение 1)

PK_ID
101
201
301
302

Все уникальные идентификаторы должны быть показаны без повторения.

Задан 05/03/2013 в 12:02
источник пользователем
На других языках...                            


1 ответов

голоса
3

UNIONОператор устранения дубликатов, поэтому все , что вам нужно:

SELECT A_ID
FROM [Table A]

UNION

SELECT B_ID
FROM [Table B]

UNION

SELECT C_ID
FROM [Table C]

UPDATE: В чате, вы сказали следующее:

Таблица А имеет отношение к таблице B с A_ID и в таблице В и таблице С связаны B_ID

На основании приведенных выше данных, я не думаю , что у вас есть достаточно четкие отношения , чтобы сделать это. Вы могли бы союз Aи Bтак:

SELECT A_ID
FROM [Table A]
WHERE X_ID = 1

UNION

SELECT B.B_ID
FROM [Table B] B
INNER JOIN [Table A] A
  ON B.A_ID = A.A_ID
WHERE A.X_ID = 1

Но , основываясь на отношениях вы описали, нет никакого способа , чтобы присоединиться Cобратно Aтаким образом , что вы получите только запись , где A.X_IDопределенное значение. Лучшее , что вы можете сделать , это получить все значения в Table Cэтом матче значение в Bтом , что соответствует , по A.X_IDкрайней мере один раз :

SELECT A_ID
FROM [Table A]
WHERE X_ID = 1

UNION

SELECT B.B_ID
FROM [Table B] B
INNER JOIN [Table A] A
  ON B.A_ID = A.A_ID
WHERE A.X_ID = 1

UNION

SELECT C_ID
FROM [Table C]
WHERE B_ID IN (
  SELECT B.B_ID
  FROM [Table B] B
  INNER JOIN [Table A] A ON B.A_ID = A.A_ID
  WHERE A.X_ID = 1
)

Вполне возможно, что есть более чистый способ сделать это, но я должен вернуться к работе.

ТЛ; др: Вы можете получить близко, но вам необходимо окончательное соотношение между C_IDи X_IDсделать эту работу.

Ответил 05/03/2013 в 12:06
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more