2017-05-06 5 views
0

選択クエリとして正しい結果を返すクエリがありますが、ビューとして使用するとビューが作成されますが、ビューを参照すると「サブクエリは1行"。クエリは、 "my_postmeta_table"テーブルのフィールド "meta_key"をとり、現在の行の "meta_value"フィールドのカラム名にします。クエリでは選択できますが、ビューとしては表示されません。

post_id key1 key2 
1  val1 val2 
2  val3 val4 

これはクエリです:

post_id meta_key meta_value 
1  key1  val1 
1  key2  val2 
2  key1  val3 
2  key2  val4 

選択クエリは次のようになりますresaultsを返します。これはテーブルの上にフォーマットが

である:それはこのような何かを作ります

create or REPLACE view contacts2 as select 
    post_id pid, 
    post_date Date, 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_country" and post_id=pid) AS "Country", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_usa_states" and post_id=pid) AS "USA State", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_subject" and post_id=pid) AS "Subject", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_first_name" and post_id=pid) AS "First Name", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_last_name" and post_id=pid) AS "Last Name", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_company" and post_id=pid) AS "Company", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_position" and post_id=pid) AS "Position", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_email" and post_id=pid) AS "Email", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_message" and post_id=pid) AS "Message" 
    from my_postmeta_table, my_posts_table where my_posts_table.ID=my_postmeta_table.post_id and my_posts_table.post_type="contact" GROUP by post_id; 

so ...上記のコードから「作成または置換するcontacts2を作成する」を省略すると、gooが返されますd resaults。あなたはすべてのサブクエリが唯一の1レコードを返すことが予想される場合

は、単に各サブクエリの終わりに limit 1を追加し、あなた

+1

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

すべてのサブクエリに1を加えてみてください。 – Shadow

+0

1.あなたは明確ではありません。 「正しい結果をもたらす」とはどういう意味ですか?または「ビューとして使用する」?または「閲覧を閲覧する」、または「良い結果」を表示しますか?あなたがやっていることを説明するために言葉を使うだけでなく、上の最初のコメントごとに[mcve]ごとに正確に状況を説明してください。 2. [SELECTをGROUP BY、MySQLのONLY_FULL_GROUP_BY](https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html)の適切な使い方について読んでください。 GROUP BY列にないかGROUP BY列ごとに単一値でない場合は、集計外のSELECTで列を使用しないでください。 – philipxy

答えて

0

ありがとうございます。このようにすると、mysqlはサブクエリが確実に1レコードだけを返すことを認識します。

関連する問題