0

私はこの長くて厄介なMySQLクエリを持っています:

SELECT * FROM
    studentdates sd
        INNER JOIN
    students s ON s.student_id = sd.student_id
        INNER JOIN
    cityselections cs ON cs.city_id = s.student_city_id
        INNER JOIN
    customers c ON c.customer_id = s.student_customer_id
        INNER JOIN
    price_to_course_number ptcn ON ptcn.ptcn_course_number = sd.student_course_number
        INNER JOIN
    pricegroups pg ON pg.price_id = ptcn.ptcn_price_id
WHERE
    ('2012-10-01' OR '2012-10-31' BETWEEN sd.student_startdate AND sd.student_enddate)
        AND cs.city_id = '12'
        AND sd.student_course_number = '46248'
ORDER BY s.student_lastname ASC

これにより、次の行が出力されます(不要な列が編集されています)。

+------------+--------------------+-----------------+
| student_id | student_startdate  | student_enddate |
+------------+--------------------+-----------------+
| 299        | 2012-09-24         | 2012-10-21      |
| 299        | 2012-09-17         | 2012-09-23      |
+------------+--------------------+-----------------+

私のクエリで私が持っていることに注意してくださいWHERE ('2012-10-01' OR '2012-10-31' BETWEEN sd.student_startdate AND sd.student_enddate)

結果としてこれを取得するのはなぜですか?

| 299 | 2012-09-17 | 2012-09-23 |

4

2 に答える 2

1
SELECT * FROM
    studentdates sd
        INNER JOIN
    students s ON s.student_id = sd.student_id
        INNER JOIN
    cityselections cs ON cs.city_id = s.student_city_id
        INNER JOIN
    customers c ON c.customer_id = s.student_customer_id
        INNER JOIN
    price_to_course_number ptcn ON ptcn.ptcn_course_number = sd.student_course_number
        INNER JOIN
    pricegroups pg ON pg.price_id = ptcn.ptcn_price_id
WHERE
    sd.student_startdate >='2012-10-01' and  sd.student_enddate <='2012-10-31' 
        AND cs.city_id = '12'
        AND sd.student_course_number = '46248'
ORDER BY s.student_lastname ASC
于 2012-11-05T13:06:19.303 に答える
1

ANDORブール式を接続するために使用されます。あなたの場合、次の式があります。

'2012-10-01' OR '2012-10-31' BETWEEN sd.student_startdate AND sd.student_enddate

これには2つの部分があります(OR関係で結合されています)。

  1. '2012-10-01'
  2. '2012-10-31' BETWEEN sd.student_startdate AND sd.student_enddate

最初の部分は常にtrue(ゼロでもヌルでもない)と評価されるため、この式の結果も常に真になります。


代わりにこれを意味したのでしょうか?

sd.student_enddate >= '2012-10-01' AND sd.student_startdate <= '2012-10-31'
于 2012-11-05T13:06:37.740 に答える