-2

次のようなMySQLクエリがあります。

select 
    *, 
    (select meta_value 
        from nord_usermeta m 
        where meta_key = 'firm' and user_id = s.user_id 
        limit 1) 
        as firm, 
    (select meta_value f
        rom nord_usermeta m 
        where meta_key = 'first_name' and user_id = s.user_id 
        limit 1) 
    as first_name, 
    (select meta_value 
        from nord_usermeta m 
        where meta_key = 'last_name' and user_id = s.user_id 
        limit 1) 
    as last_name     
    from nord_submissions s 
    order by created_at desc

次に、次のような where 句で絞り込む必要があります。

select 
    *, 
    (select meta_value 
        from nord_usermeta m 
        where meta_key = 'firm' and user_id = s.user_id 
        limit 1) 
        as firm, 
    (select meta_value 
        from nord_usermeta m 
        where meta_key = 'first_name' and user_id = s.user_id 
        limit 1) 
    as first_name, 
    (select meta_value 
        from nord_usermeta m 
        where meta_key = 'last_name' and user_id = s.user_id 
        limit 1) 
    as last_name 

    from nord_submissions s 
    where firm like '%DG%' 
    order by created_at desc

問題は明らかにサブクエリの使用方法にありますが、where 句でそれを参照する方法が見つかりません。
助けてください。

4

2 に答える 2

3

なぜそんなに長くなるのですか... SELF JOIN(クエリで同じテーブルを結合する)で試してください..以下を参照してください(テストされていません)

 SELECT ns.*,
        um1.meta_value AS firmName,
        um2.meta_value AS firstName,
        um3.meta_value AS lastName
 FROM nord_submission ns
 INNER JOIN nord_usermeta um1 USING(id) AND meta_key = 'firm'
 INNER JOIN nord_usermeta um2 USING(id) AND meta_key = 'first_name'
 INNER JOIN nord_usermeta um3 USING(id) AND meta_key = 'last_name'
 WHERE um1.meta_value LIKE '%DG%'
 ORDER BY ns.created_at

注:両方のテーブルに異なる列名があり、それによって相互に参照している場合は USING(id)ns.user_id=um1.user_idなどに置き換えることができます

于 2013-03-15T10:06:36.333 に答える
1

列ではなくキーを使用する場合は、アプリケーションにソートさせる必要があります。非常に多くのサブクエリを使用すると、パフォーマンスが低下します。

SELECT *
FROM nord_submissions 
 INNER JOIN nord_usermeta 
 USING (user_id)
WHERE (meta_key='last_name' or meta_key='first_name' or (meta_key='firm' and meta_value LIKE '%DG%') )
ORDER BY created_at desc
于 2013-03-15T10:17:18.947 に答える