0

特定の日付の2つの行を一致させて結合するMysqlクエリ. こんにちは私は初心者です。スタックオーバーフローを1日間グーグルで検索しましたが、答えが見つかりません。次の問題を助けてください

私はテーブルを持っています:人々

Id   Leader Name1   Name2   StartDate  EndDate
123  1      Person1         2013-02-11 2013-02-17
123  0              Person2 2013-02-13 2013-02-13
123  0              Person3 2013-02-13 2013-02-13

質問があります1

(SELECT t1.Id, t1.Name1, t1.Name2
 FROM `dbo`.`people` t1
WHERE t1.StartDate >= '2013-02-11'
AND t1.Leader = 1)

UNION 

(SELECT t2.Id, t2.Name1, t1.Name2
FROM `dbo`.`people` t2
WHERE t2.StartDate >= '2013-02-11'
AND t2.Leader = 0)

これは戻ります

Id   Name1   Name2
123, Person1 

クエリがあります2

(SELECT t1.Id, t1.Name1, t1.Name2
FROM `dbo`.`people` t1
WHERE t1.StartDate >= '2013-02-13'
AND t1.Leader = 1)

UNION 

(SELECT t2.Id, t2.Name1, t1.Name2
FROM `dbo`.`people` t2
WHERE t2.StartDate >= '2013-02-13'
AND t2.Leader = 0)

これは戻ります

Id   Name1   Name2
123, Person1 
123,         Person2
123,         Person3

表示するには 2012 年 2 月 11 日の結果が必要です

Id   Name1   Name2
123, Person1 null

2012-02-13 を表示するには

Id   Name1   Name2
123, Person1 Person2
123, Person1 Person3
4

1 に答える 1

0

なぜあなたはこれらの組合をやっているのですか?ユニオンは 2 つの結果セットを比較せずに加算することを理解していますか? おそらく、あなたは自己結合をしようとしていますか?もしそうなら、あなたはここで例を見つけるでしょう: How does a MYSQL Self-Join Work?

また、テーブルは正規化されていますか? http://en.wikipedia.org/wiki/Database_normalizationを参照してください 。テーブルを分割すると、この処理が楽になる場合があります。よくある初心者の間違いは、1 つの表にあまりにも多くの情報を詰め込もうとすることです。なぜ「名前 1」と「名前 2」があるのですか? おそらく、保存する情報がリーダーと非リーダーで異なる場合は、別の「リーダー」テーブルを用意し、それらを ID に関連付ける必要があります。テーブルの id 列が常に同じなのはなぜですか? そのIDは何ですか?これらの人々は何らかの形で同じグループの一員ですか?

理解に役立つ結合に関する追加情報を次に示します。

http://dev.mysql.com/doc/refman/5.0/en/join.html

http://en.wikipedia.org/wiki/Join_%28SQL%29

于 2013-02-09T12:29:13.237 に答える