Sql 现有查询工作-我需要从另一个表中添加一列
我有一个提供所需结果的现有查询,但我需要从另一个表中添加一列,并且仍然得到相同的203行…当我尝试连接到该表时,我得到数千行Sql 现有查询工作-我需要从另一个表中添加一列,sql,Sql,我有一个提供所需结果的现有查询,但我需要从另一个表中添加一列,并且仍然得到相同的203行…当我尝试连接到该表时,我得到数千行 select a.state, a.alternate_id, a.reg_id from altid1 a, altid1 b where a.alternate_id=b.alternate_id and a.reg_id <> b.reg_id group by a.state, a.alternate_id, a.reg_id having
select a.state, a.alternate_id, a.reg_id
from altid1 a, altid1 b
where a.alternate_id=b.alternate_id
and a.reg_id <> b.reg_id
group by a.state, a.alternate_id, a.reg_id
having count(a.alternate_id)>1
order by state, alternate_id,reg_id;
这将为我提供状态和具有多个注册id的每个备用id…现在我需要添加两个altid1表中不存在的所有者字段
我需要连接到owner表并获得与其他列相同的203结果…owner表确实包含reg_id列,但当我尝试获取原始表中具有不同reg_id的列时,如何匹配该列
select a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1
from altid1 a, altid1 b, owner c
where a.alternate_id=b.alternate_id
and a.reg_id <> b.reg_id
group by a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1
having count(a.alternate_id)>1
order by state, alternate_id, reg_id;
谢谢你的帮助 试试这个,确保将[id column]更改为实际字段名,并且a或b表与c表有关系
select a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1
from altid1 a, altid1 b, owner c
where a.alternate_id=b.alternate_id
and a.reg_id <> b.reg_id
and c.[id column] = a or b . [id column] -- change id column to actual id field from the table and change a or b to the correct table having relationship with c table.
group by a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1
having count(a.alternate_id)>1
order by state, alternate_id, reg_id;
将所有者添加到要从中选择的表时,没有添加其他联接条件。这意味着您要在原始203行结果和所有者之间执行交叉联接
两个表A和B之间的交叉连接为每对可能的行返回一行,其中一行在A中,一行在B中。因此,如果A有n行,B有m行,交叉连接B有m*n行。不太好
您需要做的是在where语句中添加一个附加子句。我不能从你的代码中准确地说出那是什么。是否有将所有者链接到altid1的专栏
但是,也许更重要的是,不要使用逗号连接。它们使得意外地创建交叉连接和许多其他可怕的事情变得非常容易。如果意外地在大型数据库上执行交叉连接,那么很快就会得到数百万行
相反,只使用where子句过滤结果,并使用标准联接语法联接其他表
您的原始查询将变成:
select a.state, a.alternate_id, a.reg_id
from altid1 a
inner join altid1 b
on a.alternate_id = b.alternate_id
where a.reg_id <> b.reg_id
group by a.state, a.alternate_id, a.reg_id
having count(a.alternate_id)>1
order by state, alternate_id,reg_id;
请注意,我使用了内部联接!我无法从您的问题中判断是否应该使用内部联接或左联接引入所有者。对差异的简短解释是,内部联接不包括在所有者中找不到匹配行的行
注意,不要使用逗号连接在where cluase中添加c.id=a.id。谢谢,我用:和c.reg\u id=a.reg\u id尝试了这一点。这返回了2213行-因此有些东西被复制了-altid1表只有787行…其中我提取了203行。。。请注意,a表和b表实际上是同一个表-我只是尝试获取每个备用ID都有多个注册ID的行,如果可以,请向我们展示您的表结构,这样我们可以看到具体的情况。altid1的表结构-这是一个仅为一个状态创建的临时表,包含720行感谢状态1 Y VARCHAR2 6字节注册表ID 2 Y VARCHAR2 30字节备用ID 3 Y VARCHAR2 30字节所有者表结构-此表包含数千行多个州的行数状态1 N VARCHAR2 6字节注册表ID 2 N VARCHAR2 30字节合法1 3 Y VARCHAR2 60字节合法2 4 Y VARCHAR2 60字节合法3 5 Y VARCHAR2 60字节所有者1 6 Y VARCHAR2 40字节所有者类型1 7 Y VARCHAR2 3 BY表a没有所有者ID谢谢you@user2836119它只是一个占位符。我不知道你的模式是什么样子。
select a.state, a.alternate_id, a.reg_id
from altid1 a
inner join altid1 b
on a.alternate_id = b.alternate_id
inner join owner c
on c.owner_id = a.owner_id
where a.reg_id <> b.reg_id
group by a.state, a.alternate_id, a.reg_id
having count(a.alternate_id)>1
order by state, alternate_id,reg_id;