0

かなり大きなクエリがあり、そのクーリエ部分が機能していません。理由はわかりません。エラーは表示されませんが、何かが表示されない可能性があります...

SELECT o.purchaseNo, o.dateCreated, c.Name, m.mouldName, cr.courierName
FROM products AS p
INNER JOIN orderedProducts AS op ON op.productID = p.productID
INNER JOIN orders AS o ON op.orderID = o.orderID
INNER JOIN Couriers AS cr ON cr.couriersID = o.couriersID
INNER JOIN customers AS c ON c.customerID = o.customerID
INNER JOIN Moulds AS m ON m.mouldID = p.mouldID
WHERE c.Name LIKE  '%john%'
OR p.name LIKE  '%john%'
OR c.Name LIKE  '%john%'
OR c.POC1 LIKE  '%john%'
OR c.POC2 LIKE  '%john%'
OR c.Address1 LIKE  '%john%'
OR c.Address2 LIKE  '%john%'
OR c.Suburb LIKE  '%john%'
OR c.State LIKE  '%john%'
OR c.Phone LIKE  '%john%'
OR c.Email LIKE  '%john%'
OR c.ABN LIKE  '%john%'
OR c.Fax LIKE  '%john%'
OR c.CompanyName LIKE  '%john%'
OR o.purchaseNo LIKE  '%john%'
OR o.dateCreated LIKE  '%john%'
OR cr.courierName like '%john%'

Couriers cr は、問題を引き起こしている行です。cr への参照とともに削除すると、問題なく動作します。そうでなければ、そうではありません。

これを引き起こす原因についてのアイデアはありますか?

基本的に検索クエリを作成しています。データベース内の多くのテーブルに対してチェックします。これをより良くする方法について何かアドバイスがあれば、それは素晴らしいことです:)

4

1 に答える 1

1

私が推測する宅配業者の場合、LEFT OUTER JOINが必要です。

SELECT o.purchaseNo, o.dateCreated, c.Name, m.mouldName, cr.courierName
FROM products AS p
INNER JOIN orderedProducts AS op ON op.productID = p.productID
INNER JOIN orders AS o ON op.orderID = o.orderID
INNER JOIN customers AS c ON c.customerID = o.customerID
INNER JOIN Moulds AS m ON m.mouldID = p.mouldID
LEFT OUTER JOIN Couriers AS cr ON cr.couriersID = o.couriersID
WHERE c.Name LIKE  '%john%'
OR p.name LIKE  '%john%'
OR c.Name LIKE  '%john%'
OR c.POC1 LIKE  '%john%'
OR c.POC2 LIKE  '%john%'
OR c.Address1 LIKE  '%john%'
OR c.Address2 LIKE  '%john%'
OR c.Suburb LIKE  '%john%'
OR c.State LIKE  '%john%'
OR c.Phone LIKE  '%john%'
OR c.Email LIKE  '%john%'
OR c.ABN LIKE  '%john%'
OR c.Fax LIKE  '%john%'
OR c.CompanyName LIKE  '%john%'
OR o.purchaseNo LIKE  '%john%'
OR o.dateCreated LIKE  '%john%'
OR cr.courierName like '%john%'

私の推測の背後にある理由: Couriers を削除すると、結果セットが表示されます。したがって、 で一致が見つかりませんでしたが、一致する cr.couriersID = o.couriersIDかどうかに関係なく結果セットが必要なため、LEFT OUTER JOIN が必要です。

詳細については、JOIN の画像表現を参照してください。

于 2013-03-31T12:31:02.823 に答える