У меня есть три таблицы a
, b
и c
.Таблица a
связана с таблицей b
через столбец key
.Таблица b
связана с таблицей c
через столбцы word
, sense
и speech
.Кроме того, таблица c
содержит столбец id
.
Теперь некоторые строки в a.word не имеют совпадающего значения с b.word, исходя из того, что я хочу inner join
таблиц при условии, если a.word= b.word, затем присоединяйтесь, в противном случае сравните только a.end_key = b.key.
В результате я хочу получить таблицу в форме a
с дополнительными столбцами start_id
и end_id
изc
соответствует key_start
и key_end
.
Я попробовал следующую команду sql с python:
CREATE TABLE relations
AS
SELECT * FROM
c
INNER JOIN
a
INNER JOIN
b
ON
a.end_key = b.key
AND
a.start_key = b.key
AND
b.word = c.word
AND
b.speech = c.speech
AND
b.sense = c.sense
OR
a.word = b.word
a:
+-----------+---------+------+-----------+
| key_start | key_end | word | relation |
+-----------+---------+------+-----------+
| k5 | k1 | tree | h |
| k7 | k2 | car | m |
| k200 | k3 | bad | ho |
+-----------+---------+------+-----------+
b:
+-----+------+--------+-------+
| key | word | speech | sense |
+-----+------+--------+-------+
| k5 | sky | a | 1 |
| k2 | car | a | 1 |
| k3 | bad | n | 2 |
+-----+------+--------+-------+
c:
+----+---------+--------+-------+
| id | word | speech | sense |
+----+---------+--------+-------+
| 0 | light | a | 1 |
| 0 | dark | b | 3 |
| 1 | neutral | a | 2 |
+----+---------+--------+-------+
Изменить для уточнения:
Значения таблиц a
, b
и c
содержат сотни тысяч строк, поэтомув таблицах есть совпадающие значения.Таблица a
относится к таблице b
с отношением end_key
~ key
и start_key
~ key
.Таблица b
относится к c
- word
sense
и speech
, в каждом из этих столбцов есть значения, которые совпадают.
Требуемая таблица находится в форме
start_id
| key_start
| key_end
| end_id
| relation
Где start_id
соответствует key_start
и key_end
соответствует end_id
.