根据多个表使用选定数据更新Mysql

根据多个表使用选定数据更新Mysql,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我编写了一个SELECT查询来选择特定的值,基本上它只选择所有3个表中的数据 但是当我尝试更新时,它仍然更新了比应该更新的更多的数据(行) 这是精选的 SELECT i.id, i.group_id, i.name, u.item, u.value, u.shows, u.nr, u.type FROM items AS i INNER JOIN item_groups, item_properties2 AS u ON item_groups.id = i.gro

我编写了一个
SELECT
查询来选择特定的值,基本上它只选择所有3个表中的数据

但是当我尝试更新时,它仍然更新了比应该更新的更多的数据(行)

这是精选的

SELECT 
    i.id, i.group_id, i.name, u.item, u.value, u.shows, u.nr, u.type
FROM 
    items AS i
INNER JOIN 
    item_groups, item_properties2 AS u ON item_groups.id = i.group_id
WHERE 
    item_groups.idp = '1140503406'
    AND i.id = u.item
    AND u.type = 1140614900
LIMIT 
    30, 3000 
这是最新消息

UPDATE item_properties2 AS P
INNER JOIN items ON items.id = P.item
INNER JOIN item_groups ON item_groups.idp = '1140503406'
SET P.nr = '0'
WHERE
    P.type = 1140614900`
它似乎忽略了我的项目_groups.idp='1140503406',而是更新其中的所有内容,而不仅仅是此值。我不知道如何理解,它应该只更新数据,如果它的item_groups.idp='1140503406',而不是所有item_groups.idp

帮助

样本数据

CREATE TABLE IF NOT EXISTS `item_groups` (
  `id` int(11) NOT NULL default '0',
  `idp` int(11) default '0',
  `text_id` int(10) unsigned default NULL,
  `name` text NOT NULL,
  `nr` int(11) default '0',
  `title` text,
  `description` text,
  `keywords` text,
  `seo_title` text,
  `seo_description` text,
  `seo_keywords` text,
  `active` tinyint(1) unsigned NOT NULL default '1',
  `type` tinyint(2) unsigned NOT NULL default '0',
  `ord_alias` varchar(128) NOT NULL default '',
  `another_title` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `idp` (`idp`)
) TYPE=MyISAM;





(1339999485, 1306487541, 0, 'Scandomestic||||||||{lv}', 20, NULL, '||||||||{lv}', NULL, 'Šaldytuvai vitrinos, šaldymo vitrinos, šaldytuvas vitrina, šaldymo vitrina||||||||{lv}', 'Šaldytuvai vitrinos, šaldymo vitrinos, Šalna — šaldytuvai pramonei, šaldikliai pramonei, šaldymo skrynios, šaldytuvai vitrinos, šaldymo vitrinos, šaldymo spintos, Minsk, Polair, Snaige||||||||{lv}', 'Šaldytuvai vitrinos, šaldymo vitrinos, Šalna, šaldytuvai pramonei, šaldikliai pramonei, šaldymo skrynios, šaldytuvai vitrinos, šaldymo vitrinos, šaldymo spintos, Minsk, Polair, Snaige||||||||{lv}', 1, 0, '003_003_009_020', '||||||||{lv}'),
(1340000121, 1273586684, 0, 'Šaldymo stalai||Refrigeration tables||??????????? ???????||||{lv}Saldešanas galdi', 6, NULL, '||||||||{lv}', NULL, 'Šaldymo stalai, šaldymo stalai||||||||{lv}', 'Šaldymo stalai, Šalna — šaldytuvai pramonei, šaldikliai pramonei, šaldymo skrynios, šaldytuvai vitrinos, šaldymo vitrinos, šaldymo spintos, Electrolux, Liebherr, Whirlpool, šaldymo iranga, šaldymo kameros, šaldymo vitrinos||||||||{lv}', 'šaldymo iranga, Šaldymo skrynios, Šalna, šaldytuvai pramonei, šaldikliai pramonei, šaldymo skrynios, šaldytuvai vitrinos, šaldymo vitrinos, šaldymo spintos, Electrolux, Liebherr, Whirlpool, šaldymo iranga, šaldymo kameros, šaldymo vitrinos||||||||{lv}', 1, 2, '003_006', '||||||||{lv}'),
(1340114091, 1140503406, 0, 'Panasonic||||||||{lv}', 45, NULL, '||||||||{lv}', NULL, '||||||||{lv}', '||||||||{lv}', '||||||||{lv}', 1, 0, '002_001_045', '||||||||{lv}'),
(1340351314, 1339500892, 0, 'Mawi||Mawi||Mawi||||{lv}Mawi', 209, NULL, '||||||||{lv}', NULL, '||||||||{lv}', '||||||||{lv}', '||||||||{lv}', 1, 2, '003_004_018_209', '||||||||{lv}'),
(1340687392, 1140503406, 0, 'UPO||||||||{lv}', 47, NULL, '||||||||{lv}', NULL, 'Sharp||Sharp||Sharp||||{lv}', 'Sharp šaldytuvas-šaldiklis||Sharp fridges||Sharp||||{lv}', 'Sharp, šaldytuvas, šaldytuvai, šaldikliai, šaldiklis, šaldymo iranga, šaldymo iranga buiciai||Sharp, fridges, freezers||Sharp||||{lv}', 1, 0, '002_001_047', '||||||||{lv}');

DROP TABLE IF EXISTS `item_properties2`;

CREATE TABLE IF NOT EXISTS `item_properties2` (
  `id` int(11) NOT NULL auto_increment,
  `type` int(11) default NULL,
  `item` int(11) default NULL,
  `value` text,
  `shows` int(11) default NULL,
  `nr` int(11) default NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=78180 ;
--

--正在转储表
项目属性2的数据
--

--正在转储表
项属性组2的数据

将谓词
items\u groups.idp='1140503406'
移动到
WHERE
子句,使用
JOIN
条件
item\u groups.idp=items.group\u id
代替它,如下所示:

UPDATE item_properties2 AS P
INNER JOIN items ON items.id = P.item
INNER JOIN item_groups ON item_groups.idp = items.group_id 
SET P.nr = '0'
WHERE P.type = 1140614900
  AND items_groups.idp = '1140503406';

项目组
表格与
项目
项目属性2
表格的关系如何?您应该基于列id指定一个
JOIN
条件,就像您对items.id=p.item所做的那样。id=p.item
类似于
item_groups.idp=items.someid
而不是
item_groups.idp='1140503406'
似乎您混淆了on子句与items相关的WHERE子句。项目组“id”是项目中的“组id”。它实际上与物品属性2无关。我想这至少是个问题。所以我需要更新项目表帮助。基本上,如果我仍然写得不够清楚的话。我需要将item_properties2.nr更新为0。它应该只选择以下数据:item_properties 2.type=1140614900`和item_groups.idp=1140503406。但据我所知,item_组并没有直接连接到item_属性2clueless@hihi-你能发布一些样本数据吗。这应该能正常工作。用一个普通的select而不是
UPDATE来测试它。我似乎有足够的空间在同一个文件中后期创建表和数据comment@hihi-在你的问题中,你有你想要的任何空间。使用表的一些示例数据更新它。谢谢,我好像弄错了item_groups.id=items.group_id。我需要item_groups.idp='1140503406'中的那些。
INSERT INTO `item_property_groups2` (`id`, `name`, `unit`, `nr`) VALUES
(1140614720, 'Energijos klasė||Energy Class||Класс электронергии||Energijos klasė||{lv}Enerģijas klase', '||||||||{lv}', 9),
(1140614775, 'El. įtampa||Voltage||Эл. напряжение||El. įtampa||{lv}Elektriskais spriegums', '||||||||{lv}', 11),
(1140614792, 'Bendras tūris, L||Total capacity, L||Общий объем, Л||Bendras tūris||{lv}Kopējais apjoms (litri)', 'litrai||litrai||litrai||litrai||{lv}litri', 4),
(1140614802, 'Aukštis (cm.)||Height||Высота (см)||Aukštis||{lv}Augstums (cm)', 'cm||cm||cm||cm||{lv}cm', 1),
(1140614826, 'Plotis (cm.)||Width (cm.)||Ширина  (см.)||Plotis||{lv}Platums (cm)', 'cm||cm||cm||cm||{lv}cm', 37),
(1140614843, 'Gylis (cm)||Depth (cm)||Глубина (см)||Gylis||{lv}Dziļums (cm)', 'cm||cm||cm||cm||{lv}cm', 16),
(1140614891, 'Spalva||Color||Цвет||Farbe||{lv}Krāsa', '||||||||{lv}', 38),
(1140614900, 'Gamintojas||Producer||Производитель||Gamintojas||{lv}Ražotājs', '||||||||{lv}', 24);
UPDATE item_properties2 AS P
INNER JOIN items ON items.id = P.item
INNER JOIN item_groups ON item_groups.idp = items.group_id 
SET P.nr = '0'
WHERE P.type = 1140614900
  AND items_groups.idp = '1140503406';