1

私のテーブル構造:

インベントリーアイテム:

CREATE TABLE `inventory_items` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) DEFAULT NULL COMMENT 'Usually used as invoice number',
 `vendor_id` int(10) NOT NULL DEFAULT '1',
 `item_type_id` int(10) unsigned DEFAULT NULL,
 `item_model_id` int(10) unsigned DEFAULT NULL,
 `condition_id` int(10) unsigned DEFAULT NULL,
 `item_functionality_id` int(10) unsigned DEFAULT NULL,
 `color_id` int(10) unsigned DEFAULT NULL,
 `quantity` int(10) unsigned DEFAULT NULL,
 `original_qty` int(10) DEFAULT NULL,
 `note` text,
 `zone_id` int(10) unsigned DEFAULT NULL,
 `rack_id` int(10) unsigned DEFAULT NULL,
 `shelf_id` int(10) unsigned DEFAULT NULL,
 `bin_id` int(10) unsigned DEFAULT NULL,
 `status` char(1) DEFAULT NULL COMMENT '1:CheckedIn;2:Transferred',
 `reserve` tinyint(1) NOT NULL DEFAULT '0',
 `log` text,
 `user_id` int(10) unsigned DEFAULT NULL,
 `created` datetime DEFAULT NULL,
 `modified` datetime DEFAULT NULL,
 `item_manu_model_id` int(11) NOT NULL DEFAULT '0',
 `cdma_carrier_id` int(11) DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=45334 DEFAULT CHARSET=latin1

私のSQLクエリ:

SELECT inventory_items.id,
       conditions.`name`,
       item_models.`name`
FROM   inventory_items,
       sorting_reports
       INNER JOIN item_models
               ON inventory_items.item_model_id = item_models.id
       INNER JOIN conditions
               ON inventory_items.condition_id = conditions.id
WHERE  inventory_items.item_model_id = 1111
       AND inventory_items.condition_id = 10
       AND inventory_items.id = 20
       AND ( ( inventory_items.zone_id = 21 )
              OR ( inventory_items.rack_id = 175 ) )
       AND sorting_reports.id != 0

そして、次のエラーが表示されます。

[Err] 1054 - Unknown column 'inventory_items.item_model_id' in 'on clause'

列は存在します.... :(

4

1 に答える 1

3

簡単な答え:結合タイプの混合。両方ではなく、使用Inner joinまたは,表記。,理由: コンパイラは、型結合で大きなデカルトを生成する前に、最初に内部結合ステートメントを完了しようとします。そのため、結合が試行された時点では、問題の値は認識されていません。本当にクロスジョイン状態を意味するのであれば、問題は解決するはずです。

詳細については、クロス結合の使用と 2 つのテーブル間にコンマを置くことの違いは何ですか?

SELECT inventory_items.id,
       conditions.`name`,
       item_models.`name`
FROM   inventory_items 
       CROSS JOIN sorting_reports
       INNER JOIN item_models
               ON inventory_items.item_model_id = item_models.id
       INNER JOIN conditions
               ON inventory_items.condition_id = conditions.id
WHERE  inventory_items.item_model_id = 1111
       AND inventory_items.condition_id = 10
       AND inventory_items.id = 20
       AND ( ( inventory_items.zone_id = 21 )
              OR ( inventory_items.rack_id = 175 ) )
       AND sorting_reports.id != 0
于 2013-05-14T20:12:06.890 に答える