0

次のクエリをクリーンアップし、場合によっては結合に変換するための助けを得ることができますか?

SELECT pd.id, pd.title, pd.vacation_type_ids, pd.auto_vacation_theme
FROM property_details pd
WHERE pd.company_id =247
AND pd.status =  "active"
AND pd.id NOT 
IN (
    SELECT d.property_id
    FROM property_discount d
    WHERE (
    (
    d.start_date <= CAST(  "2012-04-15" AS DATE ) 
    AND d.end_date >= CAST(  "2012-04-15" AS DATE ) 
    AND d.start_date <= CAST(  "2012-04-17" AS DATE ) 
    AND d.end_date >= CAST(  "2012-04-17" AS DATE )
    )
    OR (
    d.start_date >= CAST(  "2012-04-15" AS DATE ) 
    AND d.start_date <= CAST(  "2012-04-17" AS DATE )
    )
    OR (
    d.end_date >= CAST(  "2012-04-15" AS DATE ) 
    AND d.end_date <= CAST(  "2012-04-17" AS DATE )
    )
)
)

私はMySQLの専門家ではないので、何か間違っていたらごめんなさい

4

1 に答える 1

0

このすべては私には意味がありません。

WHERE (
(
d.start_date <= CAST(  "2012-04-15" AS DATE ) 
AND d.end_date >= CAST(  "2012-04-15" AS DATE ) 
AND d.start_date <= CAST(  "2012-04-17" AS DATE ) 
AND d.end_date >= CAST(  "2012-04-17" AS DATE )
)
OR (
d.start_date >= CAST(  "2012-04-15" AS DATE ) 
AND d.start_date <= CAST(  "2012-04-17" AS DATE )
)
OR (
d.end_date >= CAST(  "2012-04-15" AS DATE ) 
AND d.end_date <= CAST(  "2012-04-17" AS DATE )
)
)

最初のブロックは基本的にstart_date <= '2012-04-17' AND end_date >= '2012-04-17'. start_date BETWEEN '2012-04-15' AND '2012-04-17'このケースは、基本的にそれぞれ2 番目と 3 番目のブロックによって処理されますend_date BETWEEN '2012-04-15' AND '2012-04-17'

本当にORこれの間に が必要ですか、それとも が必要ANDですか?

DB 設計に関する情報を提供していないため、これら 2 つのテーブル間の次の接続が正しいかどうかを推測することしかできません。

SELECT pd.id, pd.title, pd.vacation_type_ids, pd.auto_vacation_theme
FROM property_details pd
INNER JOIN property_discount d ON pd.id = d.property_id
WHERE pd.company_id =247
AND pd.status =  'active'
(
d.start_date BETWEEN '2012-04-15' AND '2012-04-17' /*this is right when start_date is of type date, when it's datetime or timestamp you better write '2012-04-17 23:59:59', otherwise '2012-04-17 00:00:00' is assumed, which is basically not considering this date*/
OR
d.end_date BETWEEN '2012-04-15' AND '2012-04-17'
)
于 2012-04-13T13:15:15.653 に答える