Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:कॉलम में एकाधिक आईडी होने पर बाएं-जुड़ने के साथ डेटा कैसे प्राप्त करें?

आपको MySQL के FIND_IN_SET() शामिल होने के मानदंड के रूप में कार्य करें:

SELECT   info.*, GROUP_CONCAT(targets.value) AS value
FROM     info LEFT JOIN targets ON FIND_IN_SET(targets.id, info.target_ids)
GROUP BY info.id

इसे sqlfiddle पर देखें ।

हालांकि, सामान्यीकरण करना आपके लिए बेहतर होगा अपनी डेटा संरचना और अपने सूचना-लक्षित संबंधों को एक अलग तालिका में संग्रहीत करें:

CREATE TABLE InfoTargets (
  InfoID   INT NOT NULL,
  TargetID INT NOT NULL,
  PRIMARY KEY (InfoID, TargetID),
  FOREIGN KEY (InfoID)   REFERENCES info    (id),
  FOREIGN KEY (TargetID) REFERENCES targets (id)
);

INSERT INTO InfoTargets VALUES
  (1,2),
  (3,4), (3,1),
  (4,2), (4,3), (4,1);

ALTER TABLE Info DROP COLUMN target_ids;

तब आप करेंगे:

SELECT   info.id,
         GROUP_CONCAT(targets.id)    AS target_ids,
         GROUP_CONCAT(targets.value) AS value
FROM     InfoTargets
  LEFT JOIN info    ON   InfoID = InfoTargets.InfoID
  LEFT JOIN targets ON TargetID = InfoTargets.TargetID
GROUP BY info.id

यदि लक्ष्यों का क्रम महत्वपूर्ण है (और प्रत्येक info के बीच भिन्न हो सकता है आइटम), आपको एक अतिरिक्त rank create बनाना होगा InfoTargets . में कॉलम ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. regexp का उपयोग करके केवल अंक प्राप्त करें

  2. कैसे जांचें कि डुप्लिकेट से बचने के लिए कोई मान पहले से मौजूद है या नहीं?

  3. Android के साथ MySQL का उपयोग करना

  4. सीरियलाइज़ बनाम इम्प्लोड

  5. mysqldump अज्ञात विकल्प कोई बीप नहीं