Как «псевдоним» таблицы и все столбцы одновременно в MySQL? - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь использовать естественное объединение для объединения двух таблиц в MySQL, которые имеют поле, которое эквивалентно, но именуется по-разному между таблицами (я должен использовать естественное объединение - я знаю, что было бы проще использовать другоеприсоединиться).Естественное объединение ищет поля с одинаковыми именами, поэтому я хочу переименовать столбец в одной таблице с тем же именем, что и в другой таблице.В моем учебнике (не относится к mySQL) говорится, что должно работать следующее:

SELECT Fname, Lname, Address
FROM (EMPLOYEE NATURAL JOIN
(DEPARTMENT AS DEPT (Dname, Dno, Mssn, Msdate)))
WHERE Dname=‘Research’;

Интересующая меня часть - «DEPARTMENT AS DEPT (Dname, Dno, Mssn, Msdate)»... Но я не могу воспроизвести это в mySQL (это вызывает ошибку, которая говорит, что нужно проверить правильный синтаксис для использования рядом с '(Dname, Dno, Mssn, Msdate)'. Есть ли способ (просто - безвложенный запрос SELECT / FROM) переименовать отдельные столбцы, как это в mySQL, чтобы естественное объединение рассматривало столбцы как эквивалентные?

Ответы [ 3 ]

1 голос
/ 27 января 2012

вот как вы создаете ALIAS в MySQL:

для FIELD (или столбцы ) и TABLE

SELECT FName `FirstName`, LName `LastName
FROM `TableName` `NewName`

результат:

FirstName  ||   LastName
++++++++++++++++++++++++
records here...
1 голос
/ 27 января 2012

Нам действительно нужно знать имена столбцов. Я предполагаю, что вы присоединяетесь к EMPLOYEE.Dno = DEPARTMENT.Id и что Address в наборе результатов происходит от DEPARTMENT (в противном случае зачем вообще объединяться?):

SELECT Fname, Lname, Address
  FROM EMPLOYEE 
       NATURAL JOIN
       (
        SELECT Id AS Dno, Dname, Address
          FROM DEPARTMENT
       ) AS DEPT
 WHERE Dname = 'Research';

В качестве альтернативы:

SELECT Fname, Lname, Address
  FROM EMPLOYEE 
       NATURAL JOIN
       (
        SELECT Id AS Dno, Address
          FROM DEPARTMENT
         WHERE Dname = 'Research'
       ) AS DEPT;
0 голосов
/ 27 января 2012

Попробуйте этот запрос

SELECT Fname, Lname, Address
FROM (EMPLOYEE NATURAL JOIN
(DEPARTMENT AS DEPT (DEPT.Dname, DEPT.Dno, DEPT.Mssn, DEPT.Msdate)))
WHERE DEPT.Dname=‘Research’;
...