SET @a=1;
SELECT x.id2
FROM (SELECT * FROM tt WHERE id1=@a) x LEFT JOIN tt y
ON x.id2 = y.id1
WHERE y.id1 IS NULL;
I tried it against my query and it works
mysql> select * from tt;
+------+------+
| id1 | id2 |
+------+------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 5 |
+------+------+
5 rows in set (0.00 sec)
mysql> SET @a=1;
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT x.id2
-> FROM (SELECT * FROM tt WHERE id1=@a) x LEFT JOIN tt y
-> ON x.id2 = y.id1
-> WHERE y.id1 IS NULL;
+------+
| id2 |
+------+
| 3 |
| 4 |
+------+
2 rows in set (0.00 sec)
mysql>
UPDATE 2012-04-18 11:58 EDT
You can take the entire query and
- make it a subquery
- LEFT JOIN the subquery to the users, groups, and profiles tables
maybe something like this
SET @a=1;
SELECT u.*,g.*,p.* FROM
(
SELECT x.id2 user_id
FROM (SELECT * FROM tt WHERE id1=@a) x LEFT JOIN tt y
ON x.id2 = y.id1
WHERE y.id1 IS NULL
) keys
LEFT JOIN users u USING (user_id)
LEFT JOIN groups g USING (user_id)
LEFT JOIN profiles p USING (user_id)
;