1

NOT IN サブクエリを使用して、tbl_jobs テーブルにリストされているジョブが tbl_delivery_items テーブルの配送アイテムに割り当てられていない場所を選択しようとすると、現在問題が発生しています。

サブクエリは、supplier_job_job_id 1 を返す必要があります (別のクエリとして実行すると返されます)。ID が 1 のジョブは NOT IN で除外されます。空のセットを期待していたときの job_id は 1 でした。クエリを生成する codeigniter コードは次のとおりです。

$this->db->join("tbl_jobs", "tbl_jobs.job_id = tbl_supplier_jobs.supplier_job_job_id");

$this->db->where_not_in("supplier_job_job_id", "SELECT delivery_item_job_id FROM tbl_delivery_items");

$result = $query->result_array();

echo $this->db->last_query();

return $result;

生成されるクエリは次のとおりです。

SELECT * FROM (`tbl_supplier_jobs`) JOIN `tbl_jobs` ON `tbl_jobs`.`job_id` = `tbl_supplier_jobs`.`supplier_job_job_id` WHERE `supplier_job_job_id` NOT IN ('SELECT delivery_item_job_id FROM tbl_delivery_items') AND `supplier_job_supplier_id` = '1' ORDER BY `tbl_jobs`.`job_number` DESC

そして、ここにデータがあります:

tbl_supplier_jobs

supplier_job_id | supplier_job_job_id | supplier_job_supplier_id

1                 1                     1

2                 2                     2

tbl_jobs

job_id | job_number | job_description | job_delivered

1        1024         aaaaa             0

2        2048         bbbbb             0

tbl_delivery_items

delivery_item_id | delivery_item_delivery_id | delivery_item_job_id | delivery_item_toa | delivery_item_pallet_quantity | delivery_item_box_quantity

1                  1                           1                      2014-08-18 16:23:04 2                               1

何か案は?

4

3 に答える 3

1

サブセレクトは文字列として出力されています。結果のクエリでは一重引用符で囲まれていることに注意してください。もちろん、それはうまくいきません。

ここであなたの意図したアプローチに実際に疑問を呈します。tbl_delivery_itemsテーブルが大きくなるにつれて、クエリはますます遅くなります。これはスケーラブルなアプローチではありません。テーブル スキーマを再検討し、完了した配送にフラグを立てるより直接的な方法を取得する必要があります。

于 2014-08-19T19:53:30.023 に答える
1

クエリは、文字列値を使用しているサブクエリを実行していません:

`supplier_job_job_id` NOT IN (
  'SELECT delivery_item_job_id FROM tbl_delivery_items'
)

supplier_job_job_idが string に等しいかどうかをチェックします'SELECT delivery_item_job_id FROM tbl_delivery_items'

LEFT JOINtotbl_delivery_itemsと .. のWHERE条件を考慮する必要がありdelivery_item_job_id IS NULLます。これは、フレームワークでかなり簡単なはずです。

于 2014-08-19T19:53:11.420 に答える