SQL:从两个表中选择类似列并通过 Id 给出约束
Posted
技术标签:
【中文标题】SQL:从两个表中选择类似列并通过 Id 给出约束【英文标题】:SQL: Select like column from two tables and give constraint by Id 【发布时间】:2015-10-29 07:33:58 【问题描述】:我有来自这个链接SQL: Select like column from two tables的开发问题
表1中的A列:
a
b
c
表2中的A列:
d
e
f
结果集应该是:
a
b
c
d
e
f
然后在该表中有投诉 ID,我想按投诉 ID 过滤,但在 where 子句中出错。 这是我的 sql 看起来很像
SELECT firstName, message, date
FROM replyComplaintUsers rcu
JOIN users u ON rcu.userId = u.userId
UNION
SELECT firstName, message, date
FROM replyComplaintControls rcc
JOIN controls c ON rcc.controlId = c.controlId
WHERE rcu.complaintId = $complaintId and rcc.complaintId = $complaintId
ORDER BY date DESC
谁能告诉我怎么了?
当我使用这个 sql 时我得到这个值 “where 子句”中的未知列“rcu.complaintId” 谢谢
【问题讨论】:
WHERE 子句仅适用于第二个 SELECT。 您的 select 子句中的 claimId 字段在哪里... 【参考方案1】:在您的查询中,WHERE
子句仅适用于UNION
的第二个SELECT
。做一个派生表:
select firstName, message, date, complaintId
from
(
SELECT firstName, message, date, complaintId
FROM replyComplaintUsers rcu
JOIN users u ON rcu.userId = u.userId
UNION
SELECT firstName, message, date, complaintId
FROM replyComplaintControls rcc
JOIN controls c ON rcc.controlId = c.controlId
) as t
WHERE t.complaintId = $complaintId
ORDER BY date DESC
注意1:DATE是ANSI SQL中的保留字,可能需要指定"DATE"
。
注 2:我不知道数据,但通常UNION ALL
是人们在做UNION
时想要的。 (即不要尝试删除重复的行。)提供更好的性能!
【讨论】:
谢谢@jarlh 我应该把“WHERE”放在两个表上“SELECT firstName, message, date FROM replyComplaintUsers rcu JOIN users u ON rcu.userId = u.userId WHERE rcu.complaintId = $complaintId UNION SELECT firstName, message, date FROM replyComplaintControls rcc JOIN controls c ON rcc.controlId = c.controlId WHERE rcc.complaintId = $complaintId ORDER BY date DESC " 它有效:)【参考方案2】:select * from (
SELECT firstName, message, date
FROM replyComplaintUsers rcu
JOIN users u ON rcu.userId = u.userId
where rcu.complaintId = $complaintId
UNION
SELECT firstName, message, date
FROM replyComplaintControls rcc
JOIN controls c ON rcc.controlId = c.controlId
WHERE rcc.complaintId = $complaintId) DV_Table
ORDER BY date DESC
【讨论】:
@Faisal 但你没有按下向上按钮..:) 我的声望仍然低于 15 对不起 :) 我稍后会投票@anwaar_hell 请点赞我的问题,我可以点赞你的答案@anwaar_hell以上是关于SQL:从两个表中选择类似列并通过 Id 给出约束的主要内容,如果未能解决你的问题,请参考以下文章