Сижу 2 часа, не могу разобраться как получить данные из двух таблиц... всегда спасала конструкция вида ... LEFT JOIN table2 USING(id) .... Но не в этот раз:
Есть 2 таблицы:
table1:
| sid | aid | foo1
| 1 | 1 | bar1
| 1 | 1 | bar1
| 1 | 1 | bar1
| 1 | 1 | bar1
| 1 | 1 | bar1
| 1 | 2 | bar11
| 1 | 2 | bar11
| 1 | 2 | bar11
table2:
| sid | aid | foo2
| 1 | 1 | bar2
| 1 | 1 | bar2
| 1 | 1 | bar2
| 1 | 1 | bar2
| 1 | 1 | bar2
| 1 | 2 | bar22
| 1 | 2 | bar22
| 1 | 2 | bar22
связывающие поля - sid и aid
Запрос:
SELECT table1.foo1, table2.foo2 FROM `table1` LEFT JOIN table2 USING(sid, aid) WHERE sid = 1 AND aid = 1
Ожидание:
| sid | aid | foo1 | foo2
| 1 | 1 | bar1 | bar2
| 1 | 1 | bar1 | bar2
| 1 | 1 | bar1 | bar2
| 1 | 1 | bar1 | bar2
| 1 | 1 | bar1 | bar2
вместо этого получаю много повторяющихся строк... помогите составить запрос
Если не вдаваться в странности представленной структуры, то:
select distinct table1.sid, table1.aid, table1.foo1, table2.foo2
from table1, table2
where table1.aid = table2.aid
and table1.sid = table2.sid
and table1.sid = 1
and table1.aid = 1
Вам нужно больше почитать про нормализацию запросов сикивела. Как написал коллега выше есть обычный джойн (который скорее всего вам и нужен). А LEFT JOIN соединяет таблицы таким образом, что при отсуствии совпадений с основной таблицей, в присоединяемой таблице будут пустые места.
SELECT table1.*, foo2 FROM `table1` JOIN
(select distinct * from table2) X
USING(sid, aid) WHERE table1.sid = 1 AND table1.aid = 1
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники