您是否发现此MySQL查询存在任何问题?它不会执行。 还有其他更好的想法吗?
INSERT INTO registration
( m_ID, e_ID, STATUS)
SELECT
:m_ID, :e_ID, 1
WHERE
EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)
传递包含e_id
和m_ID
(PDO)
基本上,目标是在插入另一个表之前检查两个ID是否存在于不同的表中。
错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL
syntax; check the manual that corresponds to your MySQL server version for the right
syntax to use near 'WHERE EXISTS ( SELECT 1 FROM tableb WHERE ID = '276') AND EX' at
line 4
答案 0 :(得分:1)
如果两个ID都存在于不同的表中
然而,您的查询会搜索tableb
两次。除非你的意思是“在一个不同的表中”(我不这么认为,你已经使用了一个EXISTS
),那么这可能是你想要的错误。
此外,PDO应该有某种错误记录。查询可能无法执行,但原因应该出现 - 或者应该可以显示 - 某处。
<强>更新强>
我担心我错了,语法不正确。除非指定了表,否则MySQL不允许SELECT ... WHERE
。
尝试更改
SELECT
:m_ID, :e_ID, 1
WHERE EXISTS
在
SELECT * FROM
( SELECT :m_ID, :e_ID, 1 ) AS dummy
WHERE EXISTS
TEST :
mysql> SELECT 42;
+----+
| 42 |
+----+
| 42 |
+----+
1 row in set (0.00 sec)
mysql> SELECT 42 WHERE true;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE true' at line 1
mysql> SELECT * FROM ( SELECT 42 ) AS answer WHERE true;
+----+
| 42 |
+----+
| 42 |
+----+
1 row in set (0.00 sec)
答案 1 :(得分:0)
你说你“想要检查来自不同表格的ID”,
目前您正在检查两次相同的表格:
EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tableb WHERE m_ID = :m_ID)
也许您应该将对tableb的第二个引用更改为tablec,如:
EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)
答案 2 :(得分:0)
也许你把列名与数组名混淆了?可以将其更改为此代码吗?
(注意m_ID现在只是ID)
EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE ID = :m_ID)
根据您的新错误编辑,这可能更有可能 或(ID现在是e_ID)
EXISTS ( SELECT 1 FROM tableb WHERE e_ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)