1

列に別名を付けて、MySql の内部選択で使用できないようです。
たとえば、MySqlで次のことを行うにはどうすればよいですか?

SELECT NAME,ID AS M_ID FROM EMPLOYEES 
WHERE EXISTS (SELECT 1 FROM MANAGERS WHERE MANAGERID = M_ID)

MySql はM_IDエイリアスを認識しません!

私のテーブル構造:

EMPLOYEES (ID,NAME) 
MANAGERS (MANAGERID,...)
4

2 に答える 2

5

MANAGERS元の列名を使用するだけです-テーブルに列がない限り、これは機能するはずIDです:

SELECT NAME, ID AS M_ID 
FROM EMPLOYEES 
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS 
    WHERE MANAGERID = ID
)

または、さらに良いことに、テーブルのエイリアスを使用します。

SELECT e.NAME, e.ID AS M_ID 
FROM EMPLOYEES AS e
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS AS m
    WHERE m.MANAGERID = e.ID
)

ORDER BY列の別名は、GROUP BYおよびHAVING句でのみ使用できます。WHERE標準 SQL では、句で列の別名を参照することはできません。この制限が課されるのは、WHEREコードの実行時に列の値がまだ決定されていない可能性があるためです。

ところで、特定の問題に対して副選択を使用することは、最善の解決策ではない可能性があります。この単純なケースでは、MySQL クエリ オプティマイザが実行計画で簡単な方法を見つけることができると思います。

于 2009-06-07T09:03:38.533 に答える
1

あなたは何をしようとしているのですか?manager テーブルに一致するレコードがあるすべての従業員を取得するように見えますか?

だったら使えないかな

SELECT
  e.name
, e.id
FROM
  employees AS e
  inner join managers AS m ON (e.id = m.managerid)
于 2009-06-07T09:00:53.250 に答える