Пересечение вершин и ребер MySQL - PullRequest
3 голосов
/ 01 апреля 2012

У меня есть 2 таблицы: edges и users

edges (с ограничением: id1

id1
name1
id2
name2

users:

id
name

Я бы хотел получить результирующий набор только ребер (id1, name1, id2, name2), чтобы ОБА id1 и id2 были в таблице пользователей. Это кажется довольно простым, но у меня возникают проблемы с его получением. Моя попытка:

SELECT
   e.id1 AS id1,
   e.name1 AS name1,
   e.id2 AS id2,
   e.name2 AS name2
FROM 
   edges AS e,
   users AS u
WHERE u.id = e.id1

UNION

SELECT
   e.id1 AS id1,
   e.name1 AS name1,
   e.id2 AS id2,
   e.name2 AS name2
FROM 
   edges AS e,
   users AS u
WHERE u.id = e.id2

Есть указатели?

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Попробуйте:

select e.id1, e.name1, e.id2, e.name2 from edges e
join users u1 on e.id1 = u1.id
join users u2 on e.id2 = u2.id
1 голос
/ 01 апреля 2012

Попробуйте использовать два ВНУТРЕННИХ СОЕДИНЕНИЯ, как это:

SELECT * FROM edges e 
JOIN users u1 ON e.name1 = u1.name 
JOIN users u2 ON e.name2 = u2.name
0 голосов
/ 01 апреля 2012

Может быть, что-то вроде этого:

SELECT
   e.id1 AS id1,
   e.name1 AS name1,
   e.id2 AS id2,
   e.name2 AS name2
FROM 
   edges AS e
WHERE EXISTS
  (
      SELECT
        NULL
      FROM
        users AS u
      WHERE
        u.id = e.id1
        AND u.id = e.id2
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...