1

この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
4

3 に答える 3

1

両方のIDが異なるテーブルに存在する場合

tablebしかし、クエリは2回検索します。あなたが本当に「単一の異なるテーブルで」を意味していない限り(そして私はそうは思わない、あなたは単一を使用しただろうEXISTS)、これはあなたが望んでいたエラーかもしれない。

また、PDOにはある種のエラーログが必要です。クエリは実行されない可能性がありますが、理由はどこかに表示されるはずです-または表示させることができるはずです- 。

アップデート

私は間違っていたのではないかと思います。構文が正しくありませんSELECT ... WHEREテーブルが指定されていない限り、MySQLは許可しません。

変更してみてください

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)
于 2012-08-24T21:41:01.447 に答える
0

「さまざまなテーブルのIDを確認しようとしている」とおっしゃいましたが、

現在、同じテーブルを2回チェックしています。

EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tableb WHERE m_ID = :m_ID)

次のように、tablebへの2番目の参照をtablecに変更する必要があります。

EXISTS ( SELECT 1 FROM tableb WHERE ID = :e_ID)
AND EXISTS ( SELECT 1 FROM tablec WHERE m_ID = :m_ID)
于 2012-08-24T21:39:20.643 に答える
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)
于 2012-08-24T21:50:21.910 に答える