Вопрос

Посмотрите на следующие запросы MySQL:

SELECT fname,lname FROM users WHERE users.id IN (SELECT sub FROM friends WHERE friends.dom = 1 )

Приведенный выше запрос сначала создает набор всех друзей через внутренний запрос, а затем внешний запрос выбирает список пользователей, в которых идентификаторы пользователей содержатся в наборе, созданном внутренним запросом (то есть объединение двух наборов) Отказ

И это работает нормально. Но если вам нужен внутренний набор, чтобы содержать не только сабы, где DOM = 1, но и DOMS, где SUB = 1, как так: внешний запрос остается таким же, как указано выше, чистый псевдокод:

(SELECT sub FROM friends WHERE friends.dom = 1 )
***AND***
(SELECT dom FROM friends WHERE friends.sub = 1 )

Можно ли сделать такой функциональность с внутренним запросом ??

Любая помощь или помощь оценили ребята ;-D

Спасибо много парней, моя головная боль сейчас ушла!

Это было полезно?

Решение

Попробуй это:

SELECT u.fname, u.lname
FROM users u
INNER JOIN friends f
  ON (u.id = f.sub AND f.dom = 1)
  OR (u.id = f.dom AND f.sub = 1)

Другие советы

Я не уверен, правильно ли я понял, что sub и dom представлять, но похоже, вы можете использовать UNION там:

SELECT fname, lname 
FROM   users 
WHERE  users.id IN 
       (  
          SELECT sub FROM friends WHERE friends.dom = 1 
          UNION
          SELECT dom FROM friends WHERE friends.sub = 1 
       );

Прецедент:

CREATE TABLE users (id int, fname varchar(10), lname varchar(10));
CREATE TABLE friends (dom int, sub int);

INSERT INTO users VALUES (1, 'Bob', 'Smith');
INSERT INTO users VALUES (2, 'Peter', 'Brown');
INSERT INTO users VALUES (3, 'Jack', 'Green');
INSERT INTO users VALUES (4, 'Kevin', 'Jackson');
INSERT INTO users VALUES (5, 'Steven', 'Black');

INSERT INTO friends VALUES (1, 2);
INSERT INTO friends VALUES (1, 3);
INSERT INTO friends VALUES (4, 1);
INSERT INTO friends VALUES (3, 4);
INSERT INTO friends VALUES (5, 2);

Результат:

+-------+---------+
| fname | lname   |
+-------+---------+
| Peter | Brown   |
| Jack  | Green   |
| Kevin | Jackson |
+-------+---------+
3 rows in set (0.00 sec)

Что сказал, @ Решение Алекса Вероятно, более эффективно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top