2010-12-15 15 views
15

क्या IN खंड एकाधिक फ़ील्ड में शामिल करना संभव है? निम्नलिखित की तरह कुछ:SQL सर्वर - एकाधिक फ़ील्ड के साथ खंड में

select * from user 
where code, userType in (select code, userType from userType) 

मैं एमएस उपयोग कर रहा हूँ एसक्यूएल सर्वर 2008


मैं जानता हूँ कि इस के साथ प्राप्त किया जा सकता जुड़ जाता है और मौजूद है, मैं सिर्फ यह जानना चाहते हैं कि यह सिर्फ के साथ किया जा सकता है चाहता था IN खंड।

+4

तथ्य यह है कि जैसा कि आप उम्मीद * एक मेज से दो * स्तंभों को "में" एक के करीब है दूसरी तालिका एक सामान्य स्कीमा डिजाइन पर संकेत देता है ताकि आगे सामान्यीकरण की आवश्यकता हो। –

उत्तर

14

आपके द्वारा पोस्ट किए गए तरीके से नहीं। आप काम करने के लिए केवल एक फ़ील्ड लौट सकते हैं या IN के लिए टाइप कर सकते हैं।

MSDN से

(IN): बजाय

SELECT U.* 
FROM user U 
    INNER JOIN userType UT 
    ON U.code = UT.code 
    AND U.userType = UT.userType 
+0

यीप, मैं संदिग्ध संभव नहीं था – opensas

+0

http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/4e058e95-9d7c-4baa-a73e-3c849b4c6463
test1 जहां नहीं से हटा दें मौजूद (test2 से 0 का चयन करें जहां test1.col1 = test2.col1 और test1.col2 = test2.col2) – Vijay

+0

@Vijay - आप यहाँ क्या कहने की कोशिश कर रहे हैं? – Oded

0

कैसे इस बारे में:

SELECT user.* FROM user JOIN userType on user.code = userType.code AND user.userType = userType.userType 
9

test_expression [ NOT ] IN 
    (subquery | expression [ ,...n ] 
    ) 

subquery - Is a subquery that has a result set of one column. 
      This column must have the same data type as test_expression. 

expression[ ,... n ] - Is a list of expressions to test for a match. 
         All expressions must be of the same type as 
         test_expression. 

के बजाय IN, तो आप दो क्षेत्रों का उपयोग कर एक JOIN इस्तेमाल कर सकते हैं आप इस तरह के एक फॉर्म का उपयोग कर सकते हैं:

select * from user u 
where exists (select 1 from userType ut 
       where u.code = ut.code 
       and u.userType = ut.userType) 
+0

हाँ, मैं आमतौर पर ऐसा करता हूं, बस अस्तित्व से बचने की कोशिश कर रहा हूं ... – opensas

+1

ठीक है, आपको इसे पूरा करने के लिए 'EXISTS' या' JOIN' का उपयोग करना होगा। – cdhowie

+0

हाँ, cdhowie, यही मेरा सवाल था ... – opensas

-2

मुझे नहीं लगता कि उस क्वेरी काफी पोर्टेबल है, ऐसा लगता है

select * from user 
where code in (select code from userType) and userType in (select userType from userType) 
+1

mmmm ... मुझे लगता है कि यह वही नहीं है, मैं एक ही कोड और उपयोगकर्ता टाइप के साथ एक रिकॉर्ड की तलाश में हूं ... – opensas

+1

यह काम नहीं करेगा। आपके पास एक रिकॉर्ड हो सकता है जो आपके 'कोड' से मेल खाता है और एक और रिकॉर्ड जो आपके' उपयोगकर्ता टाइप 'से मेल खाता है। – Andrew

0

कुछ का उपयोग करने के आप या तो उपयोग

SELECT * FROM user U 
INNER JOIN userType UT on U.code = UT.code 
AND U.userType = UT.userType 
+0

मुझे लगता है कि दोनों प्रश्न बराबर नहीं हैं, दूसरी क्वेरी तालिका उपयोगकर्ता से दो differents रिकॉर्ड्स से मेल खा सकती है टाइप – opensas

+0

हमम .. आप सही हैं। लेकिन यह एक या तो हो सकता है, यह उस पर निर्भर करता है जो वह चाहता है। चूंकि उन्होंने जुड़ने के साथ जवाब स्वीकार कर लिया, यह एक होना चाहिए। मेरा जवाब संपादित किया। धन्यवाद। – pavanred

-3
select * from user 
where (code, userType) in (select code, userType from userType); 
+4

यह ओरेकल में काम करता है, लेकिन SQLS –

4

मिलती कर सकते हैं केवल के साथ सुरक्षित होगा कुछ भयानक, जैसे

select * from user 
where (code + userType) in (select code + userType from userType) 

फिर आपको उन्हें जोड़ने, और कास्टिंग, और 12 का कोड और 3 का एक यूजरटाइप 3 के कोड और 23 का एक यूजरटाइप, और

वहां जोड़ने के बजाय संख्याओं को संयोजित करना होगा फिर जाना: एक समाधान है कि उपयोग नहीं करता है मिलती है या मौजूद है .. और कारणों में से एक गुच्छा क्यों आप इसका इस्तेमाल नहीं करना चाहिए;)

+0

नहीं मैंने इसका उपयोग किया है, हालांकि यह केवल काम करता है कि फ़ील्ड दोनों तार हैं। साथ ही, मैं दो फ़ील्ड के बीच एक चरित्र का उपयोग करने की सलाह देता हूं जैसे '|' i.e. 'जहां (कोड +' | '+ उपयोगकर्ता टाइप) (कोड +' | '+ उपयोगकर्ता टाइप टाइप करें उपयोगकर्ता टाइप टाइप करें) '। लेकिन मैं मानता हूं कि यह एक अच्छा समाधान नहीं है। – Andrew

0

मैं बहुत कुछ इसी तरह करना था लेकिन मौजूद है मेरी स्थिति में काम नहीं किया। यहां बताया गया है मेरे लिए काम किया है:

UPDATE tempFinalTbl 
SET BillStatus = 'Non-Compliant' 
WHERE ENTCustomerNo IN (SELECT DISTINCT CustNmbr 
      FROM tempDetailTbl dtl 
      WHERE dtl.[Billing Status] = 'NEEDS FURTHER REVIEW' 
       AND dtl.CustNmbr = ENTCustomerNo 
       AND dtl.[Service] = [Service]) 
    AND [Service] IN (SELECT DISTINCT [Service] 
      FROM tempDetailTbl dtl 
      WHERE dtl.[Billing Status] = 'NEEDS FURTHER REVIEW' 
       AND dtl.CustNmbr = ENTCustomerNo 
       AND dtl.[Service] = [Service]) 

संपादित करें: अब है कि मैं देखने के लिए, यह बहुत @ v1v3kn के जवाब

संबंधित मुद्दे