2013-07-26 3 views
2

Я хочу отобразить таблицу с соответствующими столбцами. Например, существует 3 таблицы (отдел, dept_emp и сотрудники). Если меня интересует только dept_no, мой запрос должен возвращать таблицы отделов и dept_emp. Однако, если меня интересуют dept_no и emp_no, результатом будет только таблица dept_emp.SQL-запрос INTERSECT

Итак, я придумал этот запрос, но, видимо, есть синтаксическая ошибка. Могу ли я узнать, есть ли другие альтернативы?

(SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'dept_no') 
INTERSECT 
(SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'empt_no') 
+1

Это зависит от вашей БД. Например, MySql не поддерживает INTERSECT. Поэтому, если вы укажете, что вы используете, это может помочь ответить – Uriil

+0

@ Уриль, я вижу. Я не знал об этом. И да, вы правы, я использую mysql. Есть ли другая альтернатива запросу для получения того же результата? –

ответ

2

Пока вы используете MySql, вы можете сделать это с помощью подзапроса:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME = 'dept_no' AND TABLE_NAME IN (SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME = 'empt_no') 
1

Try:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'dept_no' 
INTERSECT 
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'empt_no' 
+0

+1 - за хороший ответ. – Devart

+0

Уилл прав, запрос wun работает, потому что mysql не поддерживает пересечение. –