मैं क्वेरी के माध्यम से कुछ परिणाम के लिए simillar प्राप्त करना चाहते हैं शामिल हों?MySQL के साथ स्थिति
उत्तर
SELECT * FROM users
LEFT JOIN private AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type = 1
UNION
SELECT * FROM users
LEFT JOIN company AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type != 1
मुझे लगता है कि यह है कि आप क्या करने के लिए कोशिश कर रहे हैं, हैं ना?
जैसा कि आपने अभी कहा है कि कॉलम की संख्या अलग है, आपको कॉलम निर्दिष्ट करना होगा, उदा।
SELECT 'private' AS detailType, users.*, col1, col2, col3, '' FROM users
LEFT JOIN private AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type = 1
UNION
SELECT 'company', users.*, col1, '', '', col4 FROM users
LEFT JOIN company AS details ON users.id = details.user_id
WHERE users.id = 1 AND users.type != 1
इस उदाहरण में, निजी, जबकि कंपनी col1 और col4 है, कॉलम col1, col2 और col3 है, लेकिन आप उन सब चाहते हैं।
SELECT
users.*,
details.info,
CASE users.type WHEN '1' THEN 'private' ELSE 'company' END AS user_type
FROM
users
INNER JOIN (
SELECT user_id, info FROM private
UNION
SELECT user_id, info FROM company
) AS details ON details.user_id = users.id
संपादित करें: उत्तर (सवाल गलत समझा) के मूल संस्करण:
SELECT
*,
CASE type WHEN '1' THEN 'private' ELSE 'company' END AS details
FROM
users
WHERE
users.id = 1
यह बिल्कुल मैं क्या चाहते हैं नहीं है पाने के लिए मिलती है। निजी और कंपनी दो विभिन्न टेबल, जो मैं में शामिल करना चाहते हैं: user.type == 1 मैं पर user.id = private.user_id और user.type == 2 मैं शामिल हों चाहते हैं जब कंपनी निजी शामिल हों चाहते हैं जब User.id = company.user_id – plugowski
@plugowski पर: बदले गए उत्तर देखें। – Tomalak
मुझे यकीन है कि यह पहले से ही हल हो चुका है, लेकिन इसी तरह की समस्या वाले लोगों के लिए।
आप एक से अधिक बाईं ओर कोशिश कर सकते हैं सभी डेटा
SELECT *, IF (users.type = 1, p.name, c.name) AS name FROM users
LEFT JOIN private AS p ON (users.type = 1 AND users.id = p.user_id)
LEFT JOIN company AS c ON (users.type != 1 AND users.id = c.user_id)
मुझे नहीं पता कि अब मुझे # 1222 - उपयोग किए गए SELECT कथनों में कॉलम – plugowski
की एक अलग संख्या है यदि मैं कोड का केवल एक हिस्सा यानी उपयोग करता हूं। चुनें * उपयोगकर्ताओं से बाईं तरफ users.id = details.user_id कहां users.id = 1 और users.type = 1 विवरण के रूप में निजी शामिल हों लेकिन अगर मैं यूनिअन का उपयोग मैं 1222 – plugowski
आप तो प्राप्त होने वाले त्रुटि # है दो तालिकाओं (निजी और कंपनी) में कॉलम की एक अलग संख्या है तो आपको SELECT में समान कॉलम निर्दिष्ट करने की आवश्यकता होगी। आप नल, '', या जो भी आप चाहते हैं, का उपयोग करके रिक्त स्थान भर सकते हैं। – Cez