您是否发现此 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
if both IDs exists in different tables
但是您的查询搜索 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
测试:
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)