PostgreSQL 9 में CentOS 6 पर वहाँ pref_users
तालिका में 60000 के रिकॉर्ड कर रहे हैं:बाएं बाहरी जुड़ें - दूसरी तालिका में अस्तित्व के लिए बुलियन कैसे वापस करें?
# \d pref_users
Table "public.pref_users"
Column | Type | Modifiers
------------+-----------------------------+--------------------
id | character varying(32) | not null
first_name | character varying(64) | not null
last_name | character varying(64) |
login | timestamp without time zone | default now()
last_ip | inet |
(... more columns skipped...)
और एक और टेबल प्रयोक्ताओं की लगभग 500 आईडी जो अब और खेलने के लिए अनुमति नहीं है रखती है:
# \d pref_ban2
Table "public.pref_ban2"
Column | Type | Modifiers
------------+-----------------------------+---------------
id | character varying(32) | not null
first_name | character varying(64) |
last_name | character varying(64) |
city | character varying(64) |
last_ip | inet |
reason | character varying(128) |
created | timestamp without time zone | default now()
Indexes:
"pref_ban2_pkey" PRIMARY KEY, btree (id)
एक PHP में स्क्रिप्ट मैं एक jQuery-dataTable में सभी 60000 उपयोगकर्ताओं को pref_users
से प्रदर्शित करने का प्रयास कर रहा हूं। और मैं प्रतिबंधित उपयोगकर्ताओं को चिह्नित करना चाहता हूं (pref_ban2
में पाए गए उपयोगकर्ता)।
जिसका अर्थ है कि मुझे नामक कॉलम की आवश्यकता है, मेरी क्वेरी true
या false
पर मेरे प्रत्येक रिकॉर्ड में प्रत्येक रिकॉर्ड के लिए।
तो मैं एक बाईं बाहरी कोशिश कर रहा हूँ क्वेरी में शामिल होने:
# select
b.id, -- how to make this column a boolean?
u.id,
u.first_name,
u.last_name,
u.city,
u.last_ip,
to_char(u.login, 'DD.MM.YYYY') as day
from pref_users u left outer join pref_ban2 b on u.id=b.id
limit 10;
id | id | first_name | last_name | city | last_ip | day
----+----------+-------------+-----------+-------------+-----------------+------------
| DE1 | Alex | | Bochum | 2.206.0.224 | 21.11.2014
| DE100032 | Княжна Мэри | | London | 151.50.61.131 | 01.02.2014
| DE10011 | Aлександр Ш | | Симферополь | 37.57.108.13 | 01.01.2014
| DE10016 | Semen10 | | usa | 69.123.171.15 | 25.06.2014
| DE10018 | Горловка | | Горловка | 178.216.97.214 | 25.09.2011
| DE10019 | -Дмитрий- | | пермь | 5.140.81.95 | 21.11.2014
| DE10047 | Василий | | Cумы | 95.132.42.185 | 25.07.2014
| DE10054 | Maedhros | | Чикаго | 207.246.176.110 | 26.06.2014
| DE10062 | ssergw | | москва | 46.188.125.206 | 12.09.2014
| DE10086 | Вадим | | Тула | 109.111.26.176 | 26.02.2012
(10 rows)
आप देख सकते हैं ऊपर b.id
कॉलम को खाली है - क्योंकि इन 10 उपयोगकर्ताओं प्रतिबंधित नहीं कर रहे हैं।
स्ट्रिंग के बजाय उस कॉलम में false
मान कैसे प्राप्त करें?
और मैं कुछ coalesce
या case
अभिव्यक्ति के बाद नहीं हूं, लेकिन ऐसी क्वेरी करने के लिए "उचित" तरीका ढूंढ रहा हूं।
आपके उत्तर के लिए धन्यवाद, लेकिन क्या मुझे बेहतर (अधिक प्रभावी) उपयोग नहीं करना चाहिए 'अस्तित्व'? –
तो 'EXISTS' फ़िल्टर के रूप में कार्य करता है। यदि आप 'EXISTS' का उपयोग करते हैं, तो आपको फ़िल्टर नहीं होने पर रिकॉर्ड प्राप्त नहीं होगा। यदि आप 'बूलियन' मान प्रदर्शित करना चाहते हैं, तो आप 'केस' के साथ बेहतर हो जाएंगे। –
उस बिंदु पर, आप 'बाहरी जॉइन 'के बजाय' EXISTS' का उपयोग कर सकते हैं लेकिन वह बूलियन तर्क को नहीं बदलेगा। –