MySQL IF() फंक्शन के पहले तर्क (शर्त) में SELECT सबक्वेरी उपयोग कर सकते हैं।
नमूना डेटा: Students टेबल
mysql> SELECT * FROM Students;
+----+-----------+-----------+----------+----------------+
| id | Name | Country | Language | Course |
+----+-----------+-----------+----------+----------------+
| 1 | Francis | UK | English | Literature |
| 2 | Rick | USA | English | History |
| 3 | Correy | USA | English | Computers |
| 4 | Shane | France | French | Computers |
| 5 | Validimir | Russia | Russian | Computers |
| 6 | Steve | Australia | English | Geoinformatics |
| 7 | Rahul | India | Hindi | Yoga |
| 8 | Harshit | India | Hindi | Computers |
| 9 | Harry | NZ | English | Electronics |
+----+-----------+-----------+----------+----------------+
क्वेरी: IF() में सबक्वेरी
mysql> SELECT ID,
IF(
(SELECT COUNT(*) FROM Students WHERE Language = 'English') >
(SELECT COUNT(*) FROM Students WHERE Language <> 'English'),
CONCAT('Name is ', Name),
CONCAT('Course is ', Course)
) AS 'Name/Course'
FROM Students;
परिणाम
+----+-------------------+
| ID | Name/Course |
+----+-------------------+
| 1 | Name is Francis |
| 2 | Name is Rick |
| 3 | Name is Correy |
| 4 | Name is Shane |
| 5 | Name is Validimir |
| 6 | Name is Steve |
| 7 | Name is Rahul |
| 8 | Name is Harshit |
| 9 | Name is Harry |
+----+-------------------+
व्याख्या
- पहली सबक्वेरी: अंग्रेजी बोलने वालों की गिनती (5)
- दूसरी सबक्वेरी: गैर-अंग्रेजी बोलने वालों की गिनती (4)
- 5 > 4 सत्य → सभी पंक्तियों के लिए पहला ब्रांच निष्पादित
CONCAT('Name is ', Name)प्रत्येक पंक्ति के लिए
प्रदर्शन विचार
- सबक्वेरी प्रत्येक पंक्ति के लिए निष्पादित हो सकती है (ऑप्टिमाइज़र पर निर्भर)
- बेहतर: सबक्वेरी को CTE/वेरिएबल में निकालें
- या
CROSS JOIN (SELECT COUNT(...))उपयोग करें
सलाह: IF() में सबक्वेरी संभव है लेकिन बड़े डेटासेट पर धीमी हो सकती है। संभव हो तो JOIN या विंडो फंक्शन उपयोग करें।