我有两个表,Table A
和Table B
Table A
包含
+----+------+------+-------+-------+
| HW | Year | Sec | From | To |
+----+------+------+-------+-------+
| 1 | 2012 | 40 | 15.04 | 19.07 |
| 1 | 2012 | 40 | 19.07 | 19.14 |
| 2 | 2012 | 40 | 0 | 1.81 |
+----+------+------+-------+-------+
Table B
包含
+------+------+-------+-------+------+
| Year | Sec | From | To | Rate |
+------+------+-------+-------+------+
| 2012 | 40 | 0 | 9.93 | 70 |
| 2012 | 40 | 14.4 | 14.47 | 60 |
| 2012 | 40 | 14.47 | 19.14 | 55 |
+------+------+-------+-------+------+
我的工作是在两个表格中匹配year
和sec
,并使用Table A
rate
更新Table B
以下是查询:
SELECT DISTINCT A.[Year]
, A.[Sec]
, A.[From]
, B.[From]
, A.[To]
, B.[To]
, B.[Rate]
FROM TABLE A
JOIN TABLE B ON A.Sec = B.SEC
AND A.Year = B.YEAR
WHERE ((A.FROM >= [B.From] AND A.To <= [B.To]))
AND A.Year = '2012'
AND A.control_section = '40'
我得到以下结果:
+------+------+--------+--------+-------+-------+------+
| Year | Sec | A.From | B.From | A.To | B.To | Rate |
+------+------+--------+--------+-------+-------+------+
| 2012 | 40 | 15.04 | 0 | 19.07 | 9.93 | 70 |
| 2012 | 40 | 15.04 | 14.47 | 19.07 | 19.14 | 55 |
| 2012 | 40 | 19.07 | 0 | 19.14 | 9.93 | 70 |
| 2012 | 40 | 19.07 | 14.47 | 19.14 | 19.14 | 55 |
| 2012 | 40 | 0 | 0 | 1.81 | 9.93 | 70 |
+------+------+--------+--------+-------+-------+------+
所需的输出应如下:
+------+------+--------+--------+-------+-------+------+
| Year | Sec | A.From | B.From | A.To | B.To | Rate |
+------+------+--------+--------+-------+-------+------+
| 2012 | 40 | 15.04 | 14.47 | 19.07 | 19.14 | 55 |
| 2012 | 40 | 19.07 | 14.47 | 19.14 | 19.14 | 55 |
| 2012 | 40 | 0 | 0 | 1.81 | 9.93 | 70 |
+------+------+--------+--------+-------+-------+------+
为什么我还要获得另外两行?
答案 0 :(得分:0)
您得到的结果是错误的,因为您可能没有为列From
和To
使用数字数据类型。见:
SELECT '19.07' <= '9.93' ## Returns 1 (true);
SELECT 19.07 <= 9.93 ## Returns 0 (false);
因此,查询中的所有From
和To
比较可能都是错误的,这就是您获得意外结果的原因。
例如,通过使用适当的数据类型DECIMAL(6,2)
,您的查询将返回预期的结果。请参阅此Fiddle。