MySQL 查询 - 这里面有什么问题吗?

标签 mysql sql pdo exists

<分区>

您是否发现此 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_idm_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)

关于MySQL 查询 - 这里面有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116942/

相关文章:

php - 如何在 Magento 中将子产品添加到主产品

mysql - Wordpress - 使用 $wpdb->update 并限制 1

sql - 跨两个表执行 UPDATE SET

mysql - 尝试使用连接对 3 个表进行查询

php - 如何在循环中执行存储过程

mysql - 如何找出 MySQL 字符集排序规则(例如 utf8_unicode_ci)中各种符号的相对顺序?

java - 使用 CrudRepository 将 ZonedDateTime 转换为 MySQL 时间戳

mysql - 结合数据库查询

php - 准备语句 PDO 给出 NULL 结果 n DB

php - PDO : get result from SELECT query