LEFT

2012-10-17 8 views
5

के साथ क्वेरी समस्याओं में शामिल हों मुझे निम्नलिखित प्रश्नों को काम करने के लिए कुछ समस्याएं आ रही हैं - सभी मामलों में मुझे केवल पूरी सूची के बजाय उपयोगकर्ताओं का एक छोटा सबसेट मिलना प्रतीत होता है।
मैं है निम्नलिखित दो तालिकाओं:LEFT

Users: 

- UserId 
- email 

Updates: 

- UserId 
- Status 
- LastUpdated 

क्या मैं लौटा दी करना चाहते हैं (उपयोगकर्ता से) सभी उपयोगकर्ताओं की एक सूची है, उनकी स्थिति अगर यह आज अद्यतन किया गया था (LastUpdated क्षेत्र के आधार पर) अन्यथा रिक्त या शून्य अगर इसे आज अपडेट नहीं किया गया था।

मैं जहाँ तक इस रूप में मिल गया है:

SELECT users.userid, 
     updates.status 
FROM users 
     LEFT JOIN updates 
       ON users.userid = updates.userid 
WHERE Date(lastupdated) = Date(Now()) 

उत्तर

5

आप एक CASE बयान उपयोग कर सकते हैं केवल updates.status पाने के लिए यदि तिथि आज है:

SELECT users.userId, 
    CASE WHEN DATE(LastUpdated) = DATE(NOW()) THEN updates.status ELSE NULL END AS status 
FROM users 
LEFT JOIN updates ON users.userId=updates.userId 

या, बेहतर अभी तक, अगर आप updates पंक्ति से कुछ और की आवश्यकता नहीं है बस:

SELECT users.userId, updates.status 
FROM users 
LEFT JOIN updates ON users.userId=updates.userId 
    AND DATE(LastUpdated) = DATE(NOW()) 
2
SELECT users.userId, updates.status 
FROM  users 
LEFT JOIN updates 
    ON  updates.userId = users.userId 
    AND DATE(updates.LastUpdated) = DATE(NOW()) 

अपनी स्थिति को शामिल होने के भीतर रखें, अन्यथा यह पूछताछ के लिए हर शामिल होने के लिए मजबूर कर रहा है। वैकल्पिक रूप से, आप LastUpdatedNULL होने के लिए जांच सकते हैं मेरा मानना ​​है (चूंकि बाएं शामिल होने में केवल स्थित जानकारी शामिल होगी)।

0

इस

SELECT users.userId, case when DATE(LastUpdated) = DATE(NOW()) 
updates.status else null end as status 
    FROM users 
LEFT JOIN updates ON users.userId=updates.userIdd 
0

मैं सभी उपयोगकर्ताओं और न केवल एक आज अद्यतन है कि वापस जाने के लिए शामिल होने के बारे में सोच क्या आप के बाद कर रहे हैं छोड़ दिया बाहरी है की कोशिश करो। यह कुछ ऐसा होना चाहिए:

SELECT users.userid, updates.lastupdated 
    FROM users 
    LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW()) 
    ) updates ON users.userid = updates.userid 
संबंधित मुद्दे