2012-10-30 6 views
22

私はSQLのノブであるため、これは本当に簡単な答えであると確信しています。複数の条件で結合を実行し、両方の条件のすべての組み合わせを返します。

表1は、カラム1は(基準1)カラム2(基準2)カラム3(メトリック1)

表2、列2(基準2)カラム3(メトリック2特定カラム1(基準)を有しますtable2.criteria2)

表の各条件1について、基準2の1〜5の値があります。

私は(私はこれに先立って一つとして、表1を特定すると仮定した場合)、ここで結合文を使用する場合:

Select WeddingTable, TableSeat, TableSeatID, Name, Two.Meal 
FROM table1 as One 
inner join table2 as Two 
on One.WeddingTable = Two.WeddingTable and One.TableSeat = Two.TableSeat 

私は、私は事実を知っている場合でも、基準1 /基準2つの組み合わせのいずれかを取得3つまたは4つあります。どのようにすべての組み合わせを取得できますか?

テーブル1は基本的に座席表であり、表2は各テーブル/座席が選択した食事オプションです。表1には便利なTableSeatIDがありますが、表2には同等のIDはありません。

サンプルデータ:

enter image description here

結果はWeddingTable 001全く3席とWeddingTable 002で1シート

所望の結果である、すべての4行を表示する必要があります。

enter image description here

+4

サンプルデータ、期待される結果、実際の結果を表示します。 –

+1

おそらくまたはに変更するか – Laurence

+1

条件のいずれかと一致する値を求めますか?その場合は、AND –

答えて

33
select one.*, two.meal 
from table1 as one 
left join table2 as two 
on (one.weddingtable = two.weddingtable and one.tableseat = two.tableseat) 
0

すべてのメトリックを一覧表示するように聞こえますか?

SELECT Criteria1, Criteria2, Metric1 As Metric 
FROM Table1 
UNION ALL 
SELECT Criteria1, Criteria2, Metric2 As Metric 
FROM Table2 
ORDER BY 1, 2 

一つだけCriteria1 + Criteria2の組み合わせをしたい場合は、グループ化:

SELECT Criteria1, Criteia2, SUM(Metric) AS Metric 
FROM (
    SELECT Criteria1, Criteria2, Metric1 As Metric 
    FROM Table1 
    UNION ALL 
    SELECT Criteria1, Criteria2, Metric2 As Metric 
    FROM Table2 
) 
ORDER BY Criteria1, Criteria2 
4
SELECT aa.*, 
     bb.meal 
FROM table1 aa 
     INNER JOIN table2 bb 
      ON aa.tableseat = bb.tableseat AND 
       aa.weddingtable = bb.weddingtable 
     INNER JOIN 
     (
      SELECT a.tableSeat 
      FROM table1 a 
        INNER JOIN table2 b 
         ON a.tableseat = b.tableseat AND 
          a.weddingtable = b.weddingtable 
      WHERE b.meal IN ('chicken', 'steak') 
      GROUP by a.tableSeat 
      HAVING COUNT(DISTINCT b.Meal) = 2 
     ) c ON aa.tableseat = c.tableSeat 
+0

私は将来の問題解決のためにそのウェブサイトを念頭に置いていますが、レンダリングされた結果は私が現在必要としているものではなく、現在入手しているものです。結果は4行分のデータでなければなりません。 – tarheel

+0

'WHERE b.meal IN( 'chicken'、 'steak')の行は、この特定のフィールドが私の実際のデータに持つ2000以上の可能性を単に打ち込むことができないのでできません。 – tarheel

+0

あなたはそれをアプリケーション層で処理します。それができないと思うなら、それをどうやって検索しますか? –

1
create table a1 
(weddingTable INT(3), 
tableSeat INT(3), 
tableSeatID INT(6), 
Name varchar(10)); 

insert into a1 
(weddingTable, tableSeat, tableSeatID, Name) 
values (001,001,001001,'Bob'), 
(001,002,001002,'Joe'), 
(001,003,001003,'Dan'), 
(002,001,002001,'Mark'); 

create table a2 
(weddingTable int(3), 
tableSeat int(3), 
Meal varchar(10)); 

insert into a2 
(weddingTable, tableSeat, Meal) 
values 
(001,001,'Chicken'), 
(001,002,'Steak'), 
(001,003,'Salmon'), 
(002,001,'Steak'); 

select x.*, y.Meal 

from a1 as x 
JOIN a2 as y ON (x.weddingTable = y.weddingTable) AND (x.tableSeat = y. tableSeat); 
+0

説明はありますか? – Dmitry

関連する問題