2017-03-08 12 views
0

私はSQLクエリで質問があります。このケースでは、最後の履歴のアクティビティが14日前だったユーザーを取得する必要がありますが、履歴は空です。メール履歴が空白の場合は、メール履歴は空白になります。SQLクエリは、リストが空の場合に選択します

SELECT st.id, st.firstName, st.lastName, st.email, st.lastLogin, st.phone, st.gender, sa.title,bra.Title as brand, ss.SaleDate, teh.sDate, sa.imageUrl, sa.guid, st.mallId, sa.id saleId 
FROM dbo.Users st 
INNER JOIN KEY_SalesToUsers ss ON (st.ID=ss.userID) 
INNER JOIN Sales sa ON (sa.ID=ss.SaleID) 
INNER JOIN Brands bra ON (sa.BrandID=bra.ID) 
INNER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
WHERE CONVERT(date,DATEADD(day,1,ss.SaleDate))= CONVERT(date,getdate()) 
AND teh.sDate >= dateadd(dd,-14,getdate()) 
AND teh.sDate <= dateadd(dd,-13,getdate()) 
AND sDate <= dateadd(dd,-1,getdate()) 
ORDER BY ss.SaleDate DESC 
+0

「LEFT JOIN」対「INNER JOIN」 – Shnugo

答えて

1

代わりの

INNER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 

あなたはLEFT JOINをし、INNERが違いを登録しようともどこの基準を変更する必要がありますもう一度読んでください

LEFT OUTER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
+0

を読んでいますが、私の履歴は現在空です。したがって、要求は空の配列を返します。ヒストリーが空の場合は、この点を除外して配列を返すことができます。 –

1

を使用してみてください。 <>を2回チェックする必要はありません。日付が重要な場合は、日付形式に変換して確認してください。パフォーマンスが向上します。

0
SELECT st.id, st.firstName, st.lastName, st.email, st.lastLogin, st.phone, st.gender, sa.title,bra.Title as brand, ss.SaleDate, teh.sDate, sa.imageUrl, sa.guid, st.mallId 
    FROM dbo.Users st 
    INNER JOIN KEY_SalesToUsers ss ON (st.ID=ss.userID) 
    INNER JOIN Sales sa ON (sa.ID=ss.SaleID) 
    INNER JOIN Brands bra ON (sa.BrandID=bra.ID) 
    LEFT OUTER JOIN dbo.UserEmailHistory teh ON st.id = teh.userId 
    WHERE CONVERT(date,DATEADD(day,1,ss.SaleDate))=CONVERT(date,getdate()) 
    AND IsNull(sDate, '') = '' OR CONVERT(date,DATEADD(day,14,teh.sDate))=CONVERT(date,getdate()) 
    ORDER BY ss.SaleDate DESC 
関連する問題