Mysql 插入时SQL异或

Mysql 插入时SQL异或,mysql,Mysql,如果我的MYSQL数据库中有三个表,并且希望将其中的两个表与一个表连接起来。这些桌子看起来像这样 CONNECTTABLE +----+-----------+---------+ | ID | search_id | room_id | +----+-----------+---------+ SEARCHTABLE +----+-----------+-----+ | ID | search_id | ... | +----+-----------+-----+ SEARCHTABLE

如果我的MYSQL数据库中有三个表,并且希望将其中的两个表与一个表连接起来。这些桌子看起来像这样

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

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

SEARCHTABLE
+----+---------+-----+
| ID | room_id | ... |
+----+---------+-----+
是否可以通过MYSQL确保在CONNECTTABLE中,每个datarow中只有search\u id或room\u id不为null?如果我可以这样做,我怎么可以这样做

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

Invalid row:
+----+-----------+---------+
| ID | search_id | room_id |
+----+-----------+---------+
|  3 |    42     |   17    |
+----+-----------+---------+
致以最良好的祝愿, Gerrit

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

希望这有帮助

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 

首先,不可能在数据库中添加两个同名的表。但我认为这只是虚拟的表名,对吗?试试这个:

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

你的要求对我来说毫无意义。你为什么要这样做?@Feysal OP可能想检查
CONNECTTABLE
中的
ID
是否在这两个表中都不存在。谢谢你的回答,我已经编写了一个触发器:它对我有效。SELECT语句不是问题所在,我想确保插入的数据是有效的。只是为了绝对清楚,您是说在mySQL中检查是绝对无用的?正确。“已分析CHECK子句,但被所有存储引擎忽略。”来自