الخلية LEFT JOIN بعد بالإصدار 5.0.12 التغييرات - كيفية كتابة الاستعلام

StackOverflow https://stackoverflow.com/questions/700779

  •  22-08-2019
  •  | 
  •  

سؤال

وبعد بالإصدار 5.0.12 تغير الخلية بناء الجملة من أجل اليسار ينضم لتتوافق مع معايير SQL2003. لذلك

... FROM t1 , t2 LEFT JOIN t3 ON (expr)

ويحتاج إلى إعادة صياغة ك

... FROM (t1 , t2) LEFT JOIN t3 ON (expr

وإلا سيتم توزيعه كما ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))

والآن، لدي التطبيق القديم أنا ترقية من الخلية 3.23 (EEK!) إلى 5.1، والقانون القديم له هذا الاستعلام:

select b.*, c.*, g.*, p.perfname, p.persname 
from bookings b, customer c 
left join grade g on b.chrggrade=g.grcode 
left join person p on b.person=p.percode 
where complete='Y' and invoiced='N' 
and datemade between '2009-03-25' and '2009-03-31' 
and c.custcode=b.cust 
order by cust, person, tsref, stdt 

وهذا فشل مع خطأ SQL 1054، العمود مجهولين في b.chrggrade. هذا هو لأنه تحليل ك

وحدد ب. <م>، ج. ، ز. *، p.perfname، p.persname من الحجوزات ب (العملاء ج غادر الانضمام الصف ز على b.chrggrade = g.grcode) غادر انضمام شخص ص على b.person = p.percode حيث = كاملة 'Y' وفواتير = 'N' وdatemade بين '2009-03-25' و '2009-03-31' وc.custcode = b.cust النظام من قبل الزبون، الشخص، tsref، stdt

وعلى ما أعتقد.

وأنا متأكد من أن الأقواس وضعها بشكل صحيح إصلاح هذا ولكن أنا متعكز. لقد وجدت إشارة إلى هذا التغيير في http://bugs.mysql.com/bug.php ؟ ID = 13551 ، مما يدل على كيفية إصلاح اليسار بسيط الانضمام، ولكن ما زلت لا يمكن العمل بها لهذا الاستعلام. ديفيد

هل كانت مفيدة؟

المحلول

والتوقف عن استخدام بناء الجملة فاصلة تماما وتكون واضحة في التسجيل البيانات الخاصة بك. القوات جملة فاصلة لك لوضع التسجيل الشرط في جملة WHERE، التي قد لا تحصل على تنفيذها حتى بعد LEFT / RIGHT ينضم، اعتمادا على الطريقة التي توزيعه. استخدام صريحة تنضم يجعل الاستعلام أكثر قابلية للقراءة على أي حال.

و... FROM T1، T2 LEFT JOIN T3 ON (EXPR) يصبح ... FROM T1 INNER JOIN T2 ON (EXPR) LEFT JOIN T3 ON (EXPR)

وهذا أيضا إصلاح الخطأ كنت ترى. ما لم يكن هناك chrggrade في الجدول الحجوزات، ثم لا شيء سيتم إصلاح الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top