2012-02-13 8 views
1

MYSQLデータベースに3つのテーブルがあり、このテーブルの2つを1つのテーブルに接続する場合は、表には、このSQL排他または挿入時

CONNECTTABLE 
+----+-----------+---------+ 
| ID | search_id | room_id | 
+----+-----------+---------+ 

SEARCHTABLE 
+----+-----------+-----+ 
| ID | search_id | ... | 
+----+-----------+-----+ 

SEARCHTABLE 
+----+---------+-----+ 
| ID | room_id | ... | 
+----+---------+-----+ 

のように見えるそれはCONNECTTABLEのみsearch_id OR room_idでのDataRowあたりnullでないことをMYSQLを経由して確保することは可能ですか?もし私がそうすることができたら、どうすればいいですか?

Valid rows: 
+----+-----------+---------+ 
| ID | search_id | room_id | 
+----+-----------+---------+ 
| 1 | 42  | NULL | 
+----+-----------+---------+ 
| 2 | NULL | 1337 | 
+----+-----------+---------+ 

Invalid row: 
+----+-----------+---------+ 
| ID | search_id | room_id | 
+----+-----------+---------+ 
| 3 | 42  | 17 | 
+----+-----------+---------+ 

敬具、 ヘリット "CHECK制約" と呼ばれて何がしたい

+0

私には分かりません。なぜあなたはこれをしたいのですか? – Feysal

+0

@Feysal OPは、CONNECTTABLEの 'ID'がどちらのテーブルにも存在しないかどうかを調べたいかもしれません。 –

答えて

0

。残念ながら、MySQLはそれらをサポートしていません。さて、それを定義することはできますが、実際にはそれらをチェックすることはありません。 This articleでは、トリガーを使用して同じ機能を実装する方法について説明しています。

+0

この回答をありがとう、私はトリガをコーディングしました:http://snipt.net/esco/entweder-spalte-a-oder-spalte-b/私のために働く。 SELECTステートメントは問題ではなかった、私はINSERTされたデータが有効であることを確認したい。 – Gerrit

+0

ちょうど明白なことに、あなたはmySQLではCHECKが絶対に役に立たないと言っていますか? – puk

+0

正しい。 "CHECK句は解析されますが、すべてのストレージエンジンで無視されます。" http://dev.mysql.com/doc/refman/5.6/en/create-table.htmlから – perelman

0

希望は、これはすべての

select * from tableName where search_id is null && room_id is not null 
union 
select * from tableName where search_id is not null && room_id is null 
0

まず助け、データベース内に同じ名前の2つのテーブルを追加することはできません。しかし、私はこれがちょうどダミーのタブーネームだと推測していますか?これを試してみてください:

SELECT a.ID, b.Search_ID, c.Room_ID 
    FROM ConnectTable a LEFT JOIN SearchTableA b 
       ON a.ID = b.ID 
      LEFT JOIN SearchTableB c 
       ON a.ID = c.ID 
WHERE b.ID IS NULL OR 
     c.ID IS NULL