2017-04-21 13 views
1

テーブル内のすべてのデータと必要なデータを簡単に返すことができます。なぜ `select *、column from table;は動作しますが、` select column、* from table; `not working

SELECT *, name, age FROM users; 

ただし、最初に必要なデータを取得してから残りのデータを取得する方が便利です。

SELECT name, age, * FROM users; 

ただし、2番目のSQL文は構文エラーで失敗します。

これはなぜですか?

+1

[SELECT](https://dev.mysql.com/doc/refman/5.5/en/select.html):「選択リストの他の項目で修飾されていない '*」を使用すると、解析エラーが発生することがありますこの問題を回避するには、修飾された 'tbl_name。*'参照を使用します。 –

+1

@Damien_The_Unbelieverが提供したものを少し調べました。興味深いことに、これは「これは解析エラーを生成する可能性があります。どのような解析エラーが発生するのか、どこで発生するのかについての説明はありません。 2007年には、[バグ報告](https://bugs.mysql.com/bug.php?id=26066)がこのために提出され、2年後、まったく同じ解説で終了しました。 –

+0

ANSI/ISO SQLによれば、修飾されていない '*'が使用されている場合、それは選択リスト内に単独でなければなりません。 – jarlh

答えて

2

少し検索しました。私はこの質問に関連しているか、同じ質問をしているので、合計で3つの質問を見つけました。免責事項:私はダミアンがコメントで提供されたリンクから何かを検索することによって、それらを見つけた:

"Use of an unqualified * with other items"

あなたはこれらのSO質問を受けます

最後の質問のanswerに関するコメントでは、へのリンクが見つかりました以下の説明で、2009年に閉鎖された2007年から:私はhttp://dev.mysql.com/doc/refman/5.1/en/select.html に更新した

は動作を反映:

のみ非修飾シングル*へ 速記として使用することができますから成る選択リストすべてのテーブルからすべての列を選択します。

SELECT *をT1 INNER JOINをt2から...

tbl_name内の*すべての列を選択するための資格の省略形として使用することができます名前付きテーブルの:

SELECT t1。 、t2。 T1 INNER FROMをt2 JOINを...選択リスト内の他の項目と非修飾の

使用*は はパースエラーを生成することができます。この問題を回避するには、修飾された tbl_nameを使用してください。*参照

SELECT AVG(スコア)、t1。* FROM t1 ...私が提供する大胆

ハイライト/。私はこの動作や、どのような種類の解析エラーが発生する可能性があるのか​​、どこで発生するのかについて、これ以上の説明は見つかりませんでした。

誰かが時間がある場合、これはMySQLまたはMariaDB(同じ動作をします)のソースコードを掘り下げて答えられるかもしれませんが、私はこれに本当の答えを見出す人はいません。

+0

様々な情報をまとめていただきありがとうございます。 +1 – Luke

0

MySQLはその構文に寛大で、いつもではないが...

に加えて、有効なSQLクエリを作成する場合、それはそのようにする必要がありますので:

select col1, col2, users.* 
from users 

またはエイリアスでテーブルと列に:

select u.*, 'foobar' as col1, 1 as col2 
from users u 
関連する問題