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 给出约束的主要内容,如果未能解决你的问题,请参考以下文章

从 mySQL 表中选择一列并检查验证

SQL从具有内连接和限制的两个表中选择[重复]

SQL从具有内连接和限制的两个表中选择[重复]

SQL从具有内连接和限制的两个表中选择[重复]

将表中的一列替换为不同表中的列并选择 *

SQL,根据第三个表从两个表中选择,它引用它们