以下是针对此问题的简化问题。我有两张桌子。
表格简介:
TABLE profile
profile_id | first_name | last_name
1 | David | Battery
2 | John | Motor
表known_names:
TABLE known_names
profile_id | first_name
1 | A
1 | B
1 | C
2 | X
2 | Y
2 | X
我想要实现的是在profile.profile_id = known_names.profile_id时输出known_names.first_name和profile.last_name。但我还想在结果中的一行中打印出profile.first_name和profile.last_name。
所以查询可能看起来像这样(语法错误,我正在寻找正确的查询来执行此操作):
SELECT profile_id, first_name, last_name FROM profile CROSS JOIN known_names ON known_names.profile_id = profile.profile_id WHERE profile.first_name = 'David'
结果的一个例子是:
profile_id | first_name | last_name
1 | David | Battery
1 | A | Battery
1 | B | Battery
1 | C | Battery
我怎样才能编写一个可以实现这一目标的查询?
答案 0 :(得分:2)
试试这个::
Select t.profileId, t.firstName, t.lastName
FROM
(
SELECT
p.profile_id as profileId,
p.first_name as firstName,
p.first_name as first_Name,
p.last_name as lastName
FROM profile p
UNION
SELECT
p.profile_id as profileId,
k.first_name as firstName,
p.first_name as first_Name,
p.last_name as lastName
FROM profile p,
known_names k
WHERE k.profile_id = p.profile_id
) t
where t.first_Name='David'
答案 1 :(得分:1)
假设您可以使用profile_id作为查询的输入而不是first_name:
SELECT
p.profile_id AS profileId,
p.first_name AS firstName,
p.last_name AS lastName
FROM profile p
WHERE p.profile_id = 1
UNION
SELECT
k.profile_id AS profileId,
k.first_name AS firstName,
p.last_name AS lastName
FROM known_names k
INNER JOIN profile p ON p.profile_id = k.profile_id
WHERE k.profile_id = 1
答案 2 :(得分:1)
我必须承认我经常使用GROUP BY WITH ROLLUP,但我想用它来回答你的问题,而不使用UNION查询:
SELECT
profile_id,
COALESCE(first_name_k, first_name_p) First_Name,
Last_Name
FROM (
SELECT
p.profile_id,
k.first_name as first_name_k,
p.first_name as first_name_p,
p.last_name
FROM
profile p inner join known_names k
ON k.profile_id = p.profile_id
WHERE
p.first_name='David'
GROUP BY
p.profile_id,
k.first_name WITH ROLLUP
) s
WHERE
profile_id IS NOT NULL
ORDER BY
first_name_k IS NOT NULL,
COALESCE(first_name_k, first_name_p)
看到它正常工作here。
答案 3 :(得分:0)
<击> 撞击>
<击>SELECT a.*,
b.first_name other_FirstName
FROM profile a
INNER JOIN known_names b
ON a.profile_ID = b.profile_ID
// WHERE a.first_Name = ''
ORDER BY a.profile_id, a.first_Name
击> <击> 撞击>
SELECT a.*
FROM profile a
WHERE first_name = 'david'
UNION
SELECT c.profile_id, c.first_name, d.last_name
FROM profile b
INNER JOIN known_names c
ON b.profile_ID = c.profile_ID
CROSS JOIN
(
SELECT last_Name
FROM profile
WHERE first_name = 'david'
) d
WHERE b.first_name = 'david'
要进一步了解联接,请访问以下链接: