Php 从包含主键的表中删除行
我有两个名为distance和place的MySQL表,如下所示: 距离 放置 “id”是“距离”表的主键,“点”是“地点”表的主键“点”是“位置”表引用的“距离”表的外键。 我想从'place'表中删除点'A'的行,该行的id等于'1'。由于此外键是使用“on delete cascade constraint”创建的,因此还应删除place表的相关行。 这意味着,根据下表,应该删除距离表的第一行和位置表的第一行 这是我迄今为止在PHP代码下尝试的查询:Php 从包含主键的表中删除行,php,mysql,Php,Mysql,我有两个名为distance和place的MySQL表,如下所示: 距离 放置 “id”是“距离”表的主键,“点”是“地点”表的主键“点”是“位置”表引用的“距离”表的外键。 我想从'place'表中删除点'A'的行,该行的id等于'1'。由于此外键是使用“on delete cascade constraint”创建的,因此还应删除place表的相关行。 这意味着,根据下表,应该删除距离表的第一行和位置表的第一行 这是我迄今为止在PHP代码下尝试的查询: mysql_query("delete
mysql_query("delete p.point from place p where p.point IN SELECT * FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
但是,这不会删除行。没有错误消息。
有人能帮我解决这个问题吗?尝试在删除查询中使用内部联接:
尝试在删除查询中使用内部联接:
在WHERE in语句中使用*。如果要在中的何处使用,则只需选择ID。这是您的固定代码:
mysql_query("delete p from place p where p.point IN (SELECT p.point FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' ))");
但我不明白为什么要使用两个选择,当你可以这样做
mysql_query("delete p from place p where p.point IN (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
在WHERE in语句中使用*。如果要在中的何处使用,则只需选择ID。这是您的固定代码:
mysql_query("delete p from place p where p.point IN (SELECT p.point FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' ))");
但我不明白为什么要使用两个选择,当你可以这样做
mysql_query("delete p from place p where p.point IN (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
解决方案1:
查询中in子句之后缺少您
解决方案2:更好的选择是加入-
delete pl.* from place pl
join distance dst on dst.point=pl.point
where d.id=1;
解决方案3:最好的选择是从父表中删除,当您使用删除级联功能时,所有相关行将从子表中自动删除
DELETE FROM place WHERE `point`='A';
解决方案1:
查询中in子句之后缺少您
解决方案2:更好的选择是加入-
delete pl.* from place pl
join distance dst on dst.point=pl.point
where d.id=1;
解决方案3:最好的选择是从父表中删除,当您使用删除级联功能时,所有相关行将从子表中自动删除
DELETE FROM place WHERE `point`='A';
试着这样做
DELETE FROM place p
WHERE p.point IN (SELECT d.point
FROM distance d
WHERE d.id=1)
所以PHP查询应该是这样的
mysql\u查询“从位置p中删除,其中p.point在距离d中选择d.point,其中d.id=1”
您所做的子选择可能没有返回任何值,因此不会执行任何操作,也不会给出任何错误,因为查询已正确完成。尝试执行此操作
DELETE FROM place p
WHERE p.point IN (SELECT d.point
FROM distance d
WHERE d.id=1)
所以PHP查询应该是这样的
mysql\u查询“从位置p中删除,其中p.point在距离d中选择d.point,其中d.id=1”
您所做的子选择可能没有返回任何值,因此不会执行任何操作,也不会给出任何错误,因为查询已正确完成。请尝试以下操作:-
DELETE p.* FROM place p
INNER JOIN distance d ON p.point = d.point
WHERE d.id = 1;
试试这个:-
DELETE p.* FROM place p
INNER JOIN distance d ON p.point = d.point
WHERE d.id = 1;
mysql\u查询的折旧/删除取决于您的PHP版本-查看或mysql\u查询的折旧/删除取决于您的PHP版本-查看或我认为您不需要删除p。*可能只是从…删除p,我认为您不需要删除p。*可能只是从…删除p,这可以回答问题,最好提供一些关于此代码如何帮助的解释。如果您认为此答案有用,请加分为有用。虽然这可以回答问题,但最好提供一些关于此代码如何帮助的解释。如果您认为此答案有用,请加分为有用。