0

私の本でも同じクエリを使用しています。では、なぜ私の出力は本で与えられたものと大きく異なるのでしょうか? この本には、「|| 演算子は英数字の値の連結にはつながらないが、述語を結合する OR 演算子と見なされる」とも書かれています。「述語を結合する OR 演算子」とはどういう意味ですか?

  • データベース: テニス
  • テーブル:プレイヤー
  • カラム: playerno(pk), town, street, houseno ...etc.

  • 問題: ストラトフォードに住んでいる各プレーヤーのプレーヤー番号と住所を取得する

  • クエリ:

    select playerno, town || '' || street || '' || houseno
    from players 
    where town = 'stratford';
    
  • 本の結果:

    2   Stratford Stoney Road 43
    6   Stratford Haseltine lane 80
    

......等

  • 私の結果(同じクエリを使用):

    2   1
    6   1
    7   1
    39  1
    57  1
    83  1
    100 1 
    
4

2 に答える 2

1

本によると、SQL モード PIPES_AS_CONCAT を使用している場合、パイプは連結演算子として機能するためです。

SET sql_mode='PIPES_AS_CONCAT';
select playerno, town || '' || street || '' || houseno
from players 
where town = 'stratford';

本にあるように出力が得られます:)

于 2012-07-11T04:54:21.220 に答える
0

MySQL ではCONCAT()、列の値を 1 つの文字列にまとめるために使用する必要があります。

SELECT playerno, CONCAT(town, ' ', street, ' ', houseno)
FROM   players 
WHERE  town = 'stratford';

あなたの本はおそらく、文字列を連結するために使用するOracle連結構文を参照しています||。デフォルトでは、MySQL は||2 つ以上の条件を OR 演算子として扱い1、いずれかが「true」と評価された場合に返します。

しかし、satdev86 の回答で述べたように、MySQL、クエリを実行する前にモードが手動で設定されている場合にのみ||、連結演算子としての使用を許可します。PIPES_AS_CONCAT


編集:

あなたの本ではsql_mode、例が機能するようにMySQLを設定する必要があると明確に述べています。SQLの例の前のページにあります:

http://books.google.com/books?id=c5G42OHT96cC&pg=PT160&lpg=PT160&dq=%22This+specation+is+needed+for+the+following+examples.+It+applies+only+to+the+current+ session.%22&source=bl&ots=6b6zeFbM-2&sig=3a54S4vbgmKbPBqVbbR8OdxLLI8&hl=en&sa=X&ei=Nwz9T6fKAcfI2gWZhfDTBg&ved=0CCEQ6AEwAA

于 2012-07-11T04:48:33.700 に答える