SQL独占或插入

时间:2012-02-13 08:10:36

标签: mysql

如果我的MYSQL数据库中有三个表,并且想要将这个表中的两个连接到一个表。表格看起来像这样

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

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

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

是否有可能通过MYSQL确保在CONNECTTABLE中,每个数据流中只有search_id或room_id不为空?如果我能这样做,我该怎么办?

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

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

祝你好运, 格里特

3 个答案:

答案 0 :(得分:0)

您想要的是“CHECK约束”。不幸的是,MySQL不支持它们。好吧,它会让你定义它们,但它实际上不会检查它们。 This article讨论了使用触发器实现相同的功能。

答案 1 :(得分: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 

答案 2 :(得分:0)

首先,无法在数据库中添加两个具有相同名称的表。但我认为这只是虚拟的桌面游戏吧?试试这个:

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