1

この質問のタイトルがわかりません。

より具体的な問題を示すように更新されました。

私は2つのテーブルを持っています。

table_a

+------------+--------+---------+
| date       | used   | solar   |
+------------+--------+---------+
| 2012-03-16 | 20.317 |  -4.167 |
| 2012-03-17 | 17.308 | -38.593 |
| 2012-03-18 |  9.529 | -42.414 |
| 2012-03-19 | 13.266 | -26.372 |
| 2012-03-20 |  7.077 | -41.742 |
| 2012-03-21 |  7.625 | -43.348 |
| 2012-03-22 | 10.943 | -42.025 |
| 2012-03-23 | 11.362 | -38.532 |
| 2012-03-24 | 11.492 |  -9.434 |
| 2012-03-25 | 16.133 |  -8.280 |
| 2012-03-26 | 17.054 | -31.340 |
| 2012-03-27 |  9.356 | -49.759 |
| 2012-03-28 | 11.984 | -16.299 |
| 2012-03-29 | 20.175 |  -6.412 |
| 2012-03-30 | 16.024 | -47.509 |
| 2012-03-31 | 10.605 | -16.102 |
+------------+--------+---------+

テーブル_b

+------------+--------+
| date       | hdd    |
+------------+--------+
| 2012-03-01 | 32.884 |
| 2012-03-02 | 31.402 |
| 2012-03-03 | 22.487 |
| 2012-03-04 | 31.087 |
| 2012-03-05 | 41.679 |
| 2012-03-06 | 39.892 |
| 2012-03-07 | 17.626 |
| 2012-03-08 |  8.433 |
| 2012-03-09 | 29.580 |
| 2012-03-10 | 35.238 |
| 2012-03-11 | 22.453 |
| 2012-03-12 | 11.724 |
| 2012-03-13 |  6.486 |
| 2012-03-14 | 16.140 |
| 2012-03-15 | 21.425 |
| 2012-03-16 | 20.486 |
| 2012-03-17 | 13.744 |
| 2012-03-18 |  8.207 |
| 2012-03-19 |  3.878 |
| 2012-03-20 |  2.679 |
| 2012-03-21 |  2.701 |
| 2012-03-22 |  2.830 |
| 2012-03-23 |  4.219 |
| 2012-03-24 | 15.008 |
| 2012-03-25 | 19.155 |
| 2012-03-26 | 27.850 |
| 2012-03-27 | 32.985 |
| 2012-03-28 | 20.470 |
| 2012-03-29 | 26.230 |
| 2012-03-30 | 26.119 |
| 2012-03-31 | 24.353 |
+------------+--------+

table_aには 16 件のレコードがあります。table_bには 31 件のレコードがあります。

私が使うと...

SELECT a.date, a.used, b.hdd
FROM table_a a RIGHT JOIN table_b b ON a.date=b.date
WHERE MONTH(a.date) = 3;

おそらくtable_aには16行しかないため、16行しか取得できません。しかし、実際には where 節でなければなりません。2つを一緒に使用するにはどうすればよいですか?

31行すべてを取得するにはどうすればよいですか(他の16行の各テーブルの日付が一致すると仮定します)。左結合を試みましたが、うまくいきませんでした。

SELECT a.date, a.used, b.hdd FROM table_a a
LEFT JOIN table_b b ON a.date=b.date;
4

2 に答える 2

4

RIGHT JOINの 10 レコードすべてを表示するため、代わりに使用します。table_b

SELECT a.date, a.column1, b.column1 
FROM table_a a RIGHT JOIN table_b b ON a.date=b.date;

またはテーブル名を交換して、引き続き使用できるようにしますLEFT JOIN

SELECT b.date, b.column1, a.column1 
FROM table_b a LEFT JOIN table_a b ON a.date=b.date;

サイドノート

このクエリを実行したときに 5 つのレコードしか得られない理由は、

SELECT a.date, a.column1, b.column1 
FROM table_a a, table_b b 
WHERE a.date=b.date;

のように機能するためですINNER JOIN

SELECT a.date, a.column1, b.column1 
FROM table_a a INNER JOIN table_b b ON a.date=b.date

は、結合されている他のテーブルに少なくとも 1 つのINNER JOIN一致がある行を選択します。結合について完全に理解するには、以下の記事を参照してください。

于 2012-12-06T02:25:32.067 に答える
0

Try this:

SELECT a.date, a.used, b.hdd FROM table_b b
LEFT JOIN table_a a ON b.date=a.date AND MONTH(a.date) = 3;

OR

SELECT a.date, a.used, b.hdd
FROM table_a a RIGHT JOIN table_b b ON a.date=b.date
WHERE MONTH(b.date) = 3;
于 2012-12-06T11:47:26.820 に答える