Я хочу сравнить значения table a & c
и найти различия. Мы можем указать unique_key
из table a
путем сравнения id
между table a & b
, и сопоставив unique_key
из table b & c
, мы можем сравнить Name
из table a & c
.
Можем ли мы получить список строк, которые Name
имеют другое значение для table a & c
?
Итак, если я напишу таблицу,
table a
+----+------+-----------+
| id | Name | int_value |
+----+------+-----------+
| a1 | aa | 1 |
| a2 | bb | 2 |
| a3 | cc | 5 |
+----+------+-----------+
table b
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| a1 | !! | u1 |
| a2 | @@ | u2 |
| a3 | ## | u3 |
+----+------+-----------+
table c
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| c1 | aa | u1 |
| c2 | B1 | u2 |
| c3 | C1 | u3 |
+----+------+-----------+
В результате я хочу получить
NameA NameC unique_key
bb B1 u2
cc C1 u3
Я пробовал это sql, но ни один из них не дал мне правильного результата. Что бы вы сделали?
SELECT a.Name, c.Name, b.unique_key
FROM a
INNER JOIN b
ON a.id = b.id
LEFT JOIN c
ON b.unique_key = c.unique_key
and NOT EXISTS (SELECT * FROM a WHERE a.Name = b.Name);
реальный sql (для реальной БД) Я сделал
SELECT i.*, g.*, r.g_id
FROM i
INNER JOIN r
ON i.id = r.id
LEFT JOIN g
ON r.g_id = g.g_id
WHERE CAST('i.name1' as varbinary) != CAST('g.name1' as varbinary)
OR CAST('i.name2' as varbinary) != CAST('g.name2' as varbinary)
OR CAST('i.name3' as varbinary) != CAST('g.name3' as varbinary)
GROUP BY i.id
LIMIT 30;
ошибку я получил:
Error occurred.SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varbinary) != CAST(