1

テーブル(Wordpressが使用するもの)でクエリを実行しようとしています.1つのテーブルからID列とpost_type列を選択し、別のテーブルに左結合を2回実行します(別々のデータを取得します)。

これは私がこれまでに持っているものですが、マスタードをカットしていません:

SELECT derby_posts.id        AS pID, 
       derby_posts.post_type AS tier 
FROM   derby_posts 
       LEFT JOIN (SELECT derby_postmeta.post_id  AS dbID1, 
                         derby_postmeta.meta_key AS dbMeta1) 
              ON pid = dbid1 
                 AND dbmeta1 = 'twitter' 
       LEFT JOIN (SELECT derby_postmeta.post_id  AS dbID2, 
                         derby_postmeta.meta_key AS dbMeta2) 
              ON pid = dbid2 
                 AND dbmeta2 = 'website' 
WHERE  tier IN ('local', 'regional', 'national')

私は非常に単純なものが欠けていると確信しています...

編集:これが私のために働いた解決策です。テーブル エイリアスが役に立ち、すべての SELECT ステートメントをまとめて整理しました。また、結合でアイテムを使用していても、SELECT からアイテムを削除できることに気付きました。これにより、結果が大幅にクリーンアップされます。

SELECT 
    db.ID as id, 
    db.post_type as tier,
    dpm1.meta_value as twitter,
    dpm2.meta_value as website
FROM derby_posts db
LEFT JOIN derby_postmeta dpm1 ON (db.ID = dpm1.post_id AND dpm1.meta_key = 'twitter' )
LEFT JOIN derby_postmeta dpm2 ON (db.ID = dpm2.post_id AND dpm2.meta_key = 'website' )
WHERE db.post_type IN ('local','regional','national')
4

2 に答える 2

2

私は非常に単純なものが欠けていると確信しています...

あなたが正しいです!

selects にエイリアスを与え、そのエイリアスをON句で使用する必要があります。また、欠落しています-テーブルから読み取るステートメントFROM <table>の必須部分:SELECT

LEFT JOIN (
    SELECT derby_postmeta.post_id  AS dbID1, 
           derby_postmeta.meta_key AS dbMeta1
    FROM someTable
) dpm ON pid = dpm.dbid1 AND dpm.dbmeta1 = 'twitter'

私はSELECTエイリアスの結果を与え、dpmそれを使用して、内側の選択から外側の選択の行に行を「リンク」しました。

于 2013-02-16T16:50:28.703 に答える
1
SELECT 
    db.derby_posts.ID as pID, 
    db.derby_posts.post_type as tier,
    dpm1.post_id as dbID1,
    dpm1.meta_key as dbMeta1,
    dpm2.post_id as dbID2,
    dpm2.meta_key as dbMeta2
FROM derby_posts db
LEFT JOIN derby_postmeta dpm1 ON (db.pID = dpm1.post_id AND dpm1.meta_key= 'twitter')
LEFT JOIN derby_postmeta dpm2 ON (db.pID = dbm2.post_id AND dbm2.meta_key = 'website')
WHERE tier IN ('local','regional','national')
于 2013-02-16T16:52:29.430 に答える