5
我有一个表,可怕的设计(不是我做谢天谢地),在一个时装商店的数据类似以下内容:where table。* <> table。* - 有没有办法做这样的事情?
[关键],[lease_id],[building_name],约20个多列数据
lease_id可以和将存在的中心以及总部。我被要求找到所有的情况,其中一栋建筑物中的数据与同一租约的总部数据不匹配。
我可以很容易地做到这一点,自我加入。这里面临的挑战是有大约20列进行比较,尽管我可以手动输入每一列,但我想知道是否有更好的方法来做到这一点(这也意味着查询可以在将来使用,计算任何表变化)。
在syntaxtically荒谬的伪代码 - 我想做类似于下面会做,如果它是工作的内容:
select lp.*
from lease_proposal lp
inner join
(
select *
from lease_proposal lp2
where building_id = '001' -- assume 001 is head office for sake of example
) lp2
on lp2.lease_id = lp.lease_id
where lp.* <> lp2.*
这是不可用的SQL Server,请参阅:http://stackoverflow.com/questions/4826613/natural-join-in-sql-server – Codingo
这把我的知识了一个档次 - 真正伟大的职位, thank-you – Codingo
将'SELECT * FROM lease_proposal INTERSECT'离开查询会产生相同的结果。如果有'BUILD_ID ='001'',INTERSECT'只会抑制重复的行。然后,您使用生成的子集在另一个条件中查找不匹配的行,并且它不表示子集是否包含重复项,因为您仍然希望行中的*不在子集中。 –