हां, आप यह कर सकते हैं। आपको जिस कौशल की आवश्यकता है वह यह अवधारणा है कि टेबल सर्वर से टेबल प्राप्त करने के दो तरीके हैं। एक तरीका है ..
FROM TABLE A
दूसरा तरीका है
FROM (SELECT col as name1, col2 as name2 FROM ...) B
ध्यान दें कि चुनिंदा खंड और उसके आसपास के कोष्ठक हैं एक टेबल, एक वर्चुअल टेबल।
तो, अपने दूसरे कोड उदाहरण का उपयोग करके (मैं उन कॉलमों पर अनुमान लगा रहा हूं जिन्हें आप यहां पुनर्प्राप्त करने की उम्मीद कर रहे हैं):
SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
ध्यान दें कि आपकी वास्तविक तालिका attribute
इस जॉइन में पहली टेबल है, और इस वर्चुअल टेबल को मैंने b
. कहा है दूसरी तालिका है।
यह तकनीक विशेष रूप से तब काम आती है जब वर्चुअल टेबल किसी प्रकार की सारांश तालिका होती है। उदा.
SELECT a.attr, b.id, b.trans, b.lang, c.langcount
FROM attribute a
JOIN (
SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute
FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
JOIN (
SELECT count(*) AS langcount, at.attribute
FROM attributeTranslation at
GROUP BY at.attribute
) c ON (a.id = c.attribute)
देखें कि यह कैसे जाता है? आपने एक वर्चुअल टेबल तैयार किया है c
दो स्तंभों से युक्त, इसे अन्य दो से जोड़ दिया, ON
. के लिए स्तंभों में से एक का उपयोग किया खंड, और दूसरे को आपके परिणाम सेट में एक कॉलम के रूप में वापस कर दिया।