2012-02-13 2 views
1

Если у меня есть три таблицы в моей базе данных MYSQL и вы хотите соединить две из этой таблицы с одной таблицей. Таблицы выглядеть следующим образомSQL exclusive или на вставке

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

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

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

Можно ли обеспечить через MYSQL, что в CONNECTTABLE только SEARCH_ID ИЛИ room_id не равно нулю в DataRow? Если я смогу это сделать, как я могу это сделать?

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

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

С наилучшими пожеланиями, Геррит

+0

То, что вы просите, не имеет для меня никакого смысла. почему ты хочешь сделать это? – Feysal

+0

@Feysal OP, возможно, хочет проверить, не существует ли 'ID' в' CONNECTTABLE' в любой из таблиц. –

ответ

0

То, что вы хотите, называется "СНЕСК". К сожалению, MySQL их не поддерживает. Ну, это позволит вам определить их, но на самом деле они не будут их проверять. This article обсуждает использование триггеров для реализации той же функциональности.

+0

Спасибо за этот ответ, я закодировал триггер: http://snipt.net/esco/entweder-spalte-a-oder-spalte-b/, который работает для меня. Выражение SELECT не было проблемой, я хочу быть уверенным, что данные INSERTED действительны. – Gerrit

+0

Чтобы быть абсолютно ясным, вы говорите, что CHECKs абсолютно бесполезны в mySQL? – 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

Прежде всего, это не представляется возможным, чтобы добавить две таблицы с таким же именем в базе данных. Но я полагаю, что это только фиктивные табличные имена? попробуйте этот:

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