0

私は3つのテーブルを持っています:

"products" -         contains products
"location" -         store location
"product_orders" -   joins data from products and location 

SQLダンプ:

--
-- Table structure for table `location`
--

CREATE TABLE IF NOT EXISTS `location` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=77 ;

--
-- Dumping data for table `location`
--

INSERT INTO `location` (`id`, `name`) VALUES
(1, 'Miami'),
(2, 'Denver');

-- --------------------------------------------------------

--
-- Table structure for table `products`
--

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(255) NOT NULL DEFAULT '',
  `product` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6014552 ;

--
-- Dumping data for table `products`
--

INSERT INTO `products` (`id`, `type`, `product`) VALUES
(1, 'shirt', 'red shirt'),
(2, 'shirt', 'red shirt'),
(3, 'pants', 'blue pants'),
(4, 'pants', 'blue pants');

-- --------------------------------------------------------

--
-- Table structure for table `product_orders`
--

CREATE TABLE IF NOT EXISTS `product_orders` (
  `product_id` int(11) NOT NULL,
  `location_id` int(11) NOT NULL,
  `status` varchar(255) NOT NULL,
  PRIMARY KEY (`product_id`,`location_id`),
  KEY `ix_product_orders` (`location_id`),
  KEY `ix_product_orders_1` (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `product_orders`
--

INSERT INTO `product_orders` (`product_id`, `location_id`, `status`) VALUES
(1, 1, 'sold'),
(2, 2, 'sold'),
(1, 2, 'available'),
(2, 1, 'sold');

ストア'miamiから販売されたすべての商品を選択したい場合-このクエリは機能します:

SELECT * FROM `products`
INNER JOIN `product_orders`
ON `product_orders`.`product_id`= `products`.`id`
WHERE `product_orders`.`location_id` = '1'
AND
status = 'sold'

マイアミストアから販売されたすべての商品を削除するには、どのように書き直しますか?クエリが機能していません:

 DELETE `products` FROM `products`
INNER JOIN `product_orders`
ON `product_orders`.`location_id` = `products`.`id`
WHERE `product_orders`.`location_id` = '2'
AND
status = 'sold'
4

3 に答える 3

1

これを試してみてください

DELETE `products` FROM `products` INNER JOIN `products_orders` 
ON `products_orders`.`location_id` = `products`.`id` 
WHERE `products_orders`.`location` = 'miami' 
AND
status = 'sold'

また

DELETE prod FROM `products` AS prod INNER JOIN `products_orders` 
ON `products_orders`.`location_id` = `products`.`id` 
WHERE `products_orders`.`location` = 'miami' 
AND
status = 'sold'
于 2012-12-06T15:58:48.217 に答える
1
DELETE FROM products WHERE id IN (SELECT location_id FROM products_orders WHERE location = 'miami' AND status = 'sold');
于 2012-12-06T15:59:05.923 に答える
1

テーブルに外部キーをどのように設定したかわかりません。しかし、最も主要な仮定でそれを見ると、製品テーブルは製品データを保持し、場所は場所データを保持します。一般的なテーブルの製品注文では、製品IDごとに製品テーブルへの外部キーが1つあり、場所ごとにロケーションテーブルへの関係がもう1つあります。

だから私のコメントを裏付けるために、私は次のクエリを投稿しています。クエリ内のタイプミスと思われるフィールドに変更を加えたクエリです。:-)再びfoampilが言ったように、私は一貫してそれをしているかもしれません...

 DELETE FROM `products`
 INNER JOIN `products_orders` 
 ON `products_orders`.`product_id` = `products`.`id`
 WHERE `products_orders`.`location` = 'miami' 
 AND `products_orders`.status = 'sold'
 ;
于 2012-12-06T16:26:43.520 に答える