2010-03-03 20 views
5

İki tablo X ve Y olan bir veritabanı verildiğinde, LEFT JOIN ve Y.b1 özniteliklerinde iki tablo LEFT JOIN olması gereken bir sorgum var. Şu sorguyu kullandım:MySQL sorunu: boş masa üzerinde SOL JOIN

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1) 

Y şu anda boş bir tablo olsa bile, çalışacak kadar iyi olacağını düşündüm. Ancak, tablo Y boş olduğundan sorgu kesiliyor gibi görünüyor. Xzx15 boş bir tablo olsa bile LEFT JOIN kırmayacak şekilde bu sorguyu yeniden biçimlendirmenin herhangi bir yolu var mı? Ya da X tablosunda bir şeyle eşleşmiyor olsa bile, Y tablosunda bazı veriler olduğundan emin olmak zorundayım (LEFT JOIN).

+0

Üzgünüm, tabloları daha anlamlı hale getirmek için düzenledim. Kafamda bir fikrim vardı ve berbat ettim. – ashays

+0

Benzer bir problem yaşadım ve şairin çözümü benim için çalıştı. – jkinz

cevap

5

Tablo adlarınız biraz kafa karıştırıcı. X ve Y mi, X.a ve Y.b mi?

SELECT X.a1, X.a2, Y.a1, Y.b2 FROM X LEFT OUTER JOIN Y ON (X.a1 = Y.b1) 

eşleşen kayıt yoktur Y.a1 ve Y.b2 için null ile geri tüm X getirmelidir:

X ve Y ise

.

+1

Başka bir sol birleşmeyi biliyor musunuz? :) SOL JOIN = SOL DIŞ JOIN – Andrey

+0

@Andrey IMO 'OUTER', RDBMS 'kısayollarından bağımsız olarak ** dış ** birleşimlerinde kullanılmalıdır. –

+0

Kabul ediyorum, ancak mevcut problemde mantıklı değil sanırım – Andrey

6

Gerçek SQL'inizi göndermediğinizden beri, sadece burada varsayım yapıyorum. Tecrübem, SQL'in boş kümeye dönmesine neden olan bir yan tümcesine sahip olabileceğinizi söyledi.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1) 
WHERE Y.b3 = 'something' 

Yukarıdaki SQL, boş sonuç kümesini döndürecektir. LEFT JOIN ON deyiminde sorun olanı ortaya çıkarmak için SQL'inizi aşağıdaki biçimde değiştirmeniz gerekebilir.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X 
LEFT JOIN Y ON (X.a1 = Y.b1 and Y.b3 = 'something') 
+0

Teşekkür ederim, benzer bir sorunum vardı ve bu düzeltildi! – jkinz

+0

Sadece açık olmak gerekirse - bu aslında Y 'bir şey' esasına göre sonuçları filtreleyemez; tüm Y 'bir şey' için NULL olan bir sonuç kümesi döndürecektir. – user2426679

0

HeidiSQL veya benzeri gibi hataları döndüren bazı SQL editörü Sorgunuzu ile deneyin. Benim durumumda sorun, WHERE maddesinde belirsiz bir kimlikti.