-1

選択している列のテーブルを明示的に指定するために私が知っているMySQL構文:

SELECT p1.first, p1.last FROM people p1 /* JOIN */;

しかし、MySQLは同じ結果を達成する構文〜(以下を参照)を許可しますか?

SELECT p1 (first, last) FROM people p1 /* JOIN */;

私が遭遇する一般的な問題は、SELECTステートメントを表す連結文字列がすでにある場合ですが、値のプレフィックスを付ける必要があります。たとえば、first, last実際のクエリでは期待されますが、文字列はp1.first, p1.lastです。説明されているシナリオは、プログラムレベルです。

4

3 に答える 3

2

あなたの質問に対する答えは、いいえ、これは許可されていないということです。

連結された文字列を使用してクエリを作成するときは、SQL インジェクションの脆弱性を公開しないように注意する必要があります (それらの文字列にユーザーからのデータ入力が含まれている場合)。

于 2013-03-19T17:34:01.800 に答える
1

求めていることを行うための構文はありませんが、一意でない列の列名を修飾するだけで済みます。firstlast列がにのみ存在する場合、p1だけp1.は必要ありません。

そうでない場合、特定の列に参加している場合は、USINGこれを回避するために使用できます。例えば:

SELECT first, last FROM people p1 JOIN people p2 USING (first, last)

有効です。ただし、代わりに使用した場合ONでも、列名を修飾する必要があります。

列が複数のテーブルに存在し、それらを結合していない場合は、フィールド リスト内の列名を修飾することになります。

于 2013-03-19T17:33:43.287 に答える
0

問題がテーブルエイリアスを事前に作成された列リストに「挿入」することである場合は、次のように試すことができます。

CONCAT(table_alias, '.', REPLACE(column_list, ', ', CONCAT(', ', table_alias, '.')))

つまり、リスト内のすべてのコンマ+スペースを、コンマ+スペース+テーブルエイリアスの後にaを付けて置き換え、リストの先頭に.エイリアスを追加します。.もちろん、これはリストがコンマ+スペースで終わっていないことを前提としています。

列名にカンマが含まれていると言わないでください。

于 2013-03-19T18:53:22.357 に答える