1

我似乎无法弄清楚要做出加入声明。

select usrs.*
from
    students s
    join system_users usrs on
        s.father=usrs.user_id
        OR s.mother=usrs.user_id
        OR s.guardian=usrs.user_id
where s.user_id = '201209083'

我有这个查询,它返回:

+------------+---------+--------+--------+
| user_id    | contact | status | rights |
+------------+---------+--------+--------+
| f201209083 |    4093 | active | NULL   |
| g201209083 |    4095 | active | NULL   |
| m201209083 |    4094 | active | NULL   |
+------------+---------+--------+--------+

现在我需要的是使用联系人列的信息来检索更多信息并将其与此表连接:

select
    *
from
    address
where
    contact_id = (contact column);

我需要在一个查询中实现它的帮助。

PS有人能告诉我这种技术叫什么吗?我无法通过仅搜索 JOIN 找到这方面的信息。或者学习的链接会更好。

4

3 回答 3

1

一旦您在连接中有多个表,您可以继续连接到更多表,如下所示:

Select a.*,usrs.*
from students s
join system_users usrs on s.father=usrs.user_id OR s.mother=usrs.user_id OR s.guardian=usrs.user_id
join addresses a on a.contact_id=usrs.contact
where s.user_id = '201209083'
于 2012-11-27T18:29:02.030 回答
1

您可以将该当前语句作为子查询并将其加入:

SELECT * FROM address 
JOIN (
    SELECT 
        usrs.* 
    FROM 
        students s 
        JOIN system_users usrs ON s.father=usrs.user_id OR s.mother=usrs.user_id OR s.guardian=usrs.user_id 
    WHERE 
        s.user_id = '201209083'
) AS temp 
ON contact_id = (contact column);

这应该会给你原始结果与address表格中的结果相结合。

于 2012-11-27T18:29:09.853 回答
1

一种选择是更改第一条语句以仅返回您正在评估的列:

select usrs.contact
from
    students s
    join system_users usrs on
        s.father=usrs.user_id
        OR s.mother=usrs.user_id
        OR s.guardian=usrs.user_id
where s.user_id = '201209083'

...然后将其用作评估contact_id的条件:

SELECT
    *
FROM
    address
WHERE
    contact_id IN (
        SELECT usrs.contact
        FROM
            students s
            JOIN system_users usrs ON
                s.father=usrs.user_id
                OR s.mother=usrs.user_id
                OR s.guardian=usrs.user_id
        WHERE s.user_id = '201209083'
    )

这通常称为子查询或子选择,并且自 4.1 起在 MySQL 中得到支持。如果contact_id 匹配内部查询返回的任何值,则“IN”谓词将为真

于 2012-11-27T18:35:15.260 回答