2011-07-10 9 views
0

2つのクエリを1つにまとめる必要があります。どちらも同じテーブルと同じ列名を照会します。私は1つのクエリで結果を必要とするので、結果の領域を繰り返すことができます。私はUNIONを試しましたが、これは後半に正しく実行されません。次のようにクエリ1は、次のように2つのSQLクエリを同じテーブルの同じ列に結合するにはどうすればよいですか?

SELECT o.value AS sdate 
    FROM order_option o 
     INNER JOIN order_product p ON o.order_product_id = p.order_product_id 
    WHERE 
     p.product_id = '$_GET[u]' 
     AND o.name = 'Start Date' 

とクエリ2がある.​​..

SELECT o2.value AS sday 
    FROM order_option o2 
     INNER JOIN order_product p ON o2.order_product_id = p.order_product_id 
    WHERE 
     p.product_id = '$_GET[u]' 
     AND o2.name = 'Number of Days' 
+2

のようにMAXとCASEの組み合わせを使用することができます。 –

+0

質問を編集したりコメントを残したりできるように、アカウントの登録を検討してください。 –

答えて

1

UNIONは正しいはずです。 2番目のクエリは正しく表示されますか?その場合は、UNIONで同じ方法で実行する必要があります。 UNION ALLを試して、クエリが正しいかどうかを確認してください。

+0

私は両方を試しましたが、2番目のクエリは正しく実行されません。リピート領域の最初の部分の結果を表示すると(たとえば$ query ['sdate'])、クエリの両方の部分への応答がリストされますしかし、私は$ query ['sdate']と$ query ['sday']という別々の例が必要です! – jason

+0

あなたが何を言っているのかまだ分かりません... UNIONを作成すると、値がすべてのクエリから来ているにもかかわらず、列名が最初の列の名前になります...したがって、dayday値もsdateカラムエイリアス... – Randy

+0

あなたは結果セットにどのクエリが来たかを示すフィールドを追加できます: – Leslie

0

あなたは何かがあなたのデータベースが正規化されていないと言われます。この

SELECT 
    MAX(CASE WHEN o.name = 'Start Date' THEN o.value END) AS sdate, 
    MAX(CASE WHEN o.name = 'Number of Days' THEN o.value END) AS sday 
FROM order_option o 
    INNER JOIN order_product p USING (order_product_id) 
WHERE 
    p.product_id = '$_GET[u]' 
; 
関連する問題