2

列の最初と最後に名前のリストがあるテーブルがあります。したがって、「manager」と呼ばれる列の値は「JohnDoe」になります。このテーブルの各行を通過し、「manager」列の最初の文字と最後の名前を表示するクエリを修正したいと思います。私がすることはすべて、「サブクエリは複数の行を返す」というものです。

小さく始めて、私はちょうど最初の文字を引っ張ることに決めました:

SELECT id, LEFT((SELECT manager FROM my_table), 1) FROM my_table;

それとも私はこれに完全に基づいていないのですか

4

3 に答える 3

2

サブクエリを使用して、親クエリのフィールドにフェッチしています。そのため、サブクエリは単一の行のみを返すことができます。このように考えてください。結果セットは2次元の構成です。一連の列と行。サブクエリが返すデータは、返されるものの物理的な制約と一致する必要があります。

フィールドにフェッチしているので、それは1つのSINGLE値を意味します。複数の値を返すことが許可されている場合は、2D結果セットを3Dセット(行+列とそれらのフィールドの1つから成長する超高層ビル)に効果的に変換しようとしています。

クエリはサブクエリである必要はありません。

SELECT id, LEFT(manager, 1) AS first_letter FROM yourtable

また、名前と名前を別々にしたい場合は、それらを別々のフィールドに保存することをお勧めします。ファーストネームとラストネームのフィールドのセットから名前を再構築するのは非常に簡単ですが、モノリシック名を個々のファーストネームとラストネームに確実に分離することは非常に困難です。

simple:
     John Doe   (fn: john, ln: doe)
hard:
     Billy Jo Todd (is that "Billy" and "Jo Todd", "Billy" and "Todd" with middle name Jo?

dead simple:

    field firstname = John
    field lastname = Doe
于 2012-11-10T23:39:01.523 に答える
1

サブクエリを使用する場合、このクエリは意図したとおりに機能しますが、どのような場合でもこれが最善の方法かどうかはわかりません。それを主張するには、あなたのニーズについてもっと情報が必要です。

SELECT 
  m1.id, 
  m2.manager

FROM 
  my_table AS m1 INNER JOIN
  (SELECT id, LEFT(manager, 1) AS manager FROM my_table) as m2
  ON m1.id = m2.id

http://sqlfiddle.com/#!2/9c395/6

于 2012-11-10T23:42:29.257 に答える
0

比較する行を返すには、サブクエリに条件を追加する必要があります。

SELECT manager FROM my_table WHERE id = 1
于 2012-11-10T23:40:22.223 に答える