2012-07-18 67 views
1

是否可以像这样查询'OR'函数。查询两个相同的列

更新例如:

Select S.*, U.* from Staff S, Unit U where S.Unit='' OR S.Unit= U.UnitCode; 

职员表模式:

Staff ID, Staff Name, UnitCode, StaffNumber 

单位架构:

UnitCode, ClassCode 

上述更新示例工作。但单位为空的工作人员记录将与所有单位代码重复。

例如结果输出:

Staff ID  Staff Name  UnitCode  ClassCode Staff Number 
1   John   IT1   B123   234 
2   Sally   BUS2  B234   0589 
3   Johnson   IT1   B123   111 
4   Johnson   BUS2  B234   111 

感谢

+0

你的意思是“单位为空或单位与员工匹配”? – Boomer 2012-07-18 06:46:52

回答

2

既然你使用SQLite,使用OR代替||

Select S.*, U.* 
from Staff S, Unit U 
where S.Unit = '' OR S.Unit= U.UnitCode; 

结果是什么,如果我去掉这个条件? S.Unit = ''

Select S.*, U.* 
from Staff S INNER JOIN Unit U 
     on S.Unit = U.UnitCode; 

更新1

你可以试试这个吗?

SELECT x.* 
FROM Staff x INNER JOIN 
    (Select DISTINCT S.StaffID 
    from Staff S INNER JOIN Unit U 
      on (S.Unit = U.UnitCode) OR 
       (S.Unit = '') 
    ) y ON x.StaffID = y.StaffID 
+0

@toteski,如果我这样做,空记录将与所有单位名称等重复。我该如何解决它? – JLearner 2012-07-18 06:59:39

+0

我可以帮助你更多,如果你可以发布架构甚至一些虚拟记录,所以我可以告诉为什么结果中有重复的记录:) – Ambrose 2012-07-18 07:02:08

+0

编辑我的问题上面。我认为这是由于我的U. * – JLearner 2012-07-18 07:05:30

1

是你可以使用OR代替||

1
Select S.*, U.* from Staff S, Unit U where S.Unit='' OR S.Unit IS null OR S.Unit= U.UnitCode; 

编辑:

SELECT 
CASE WHEN S.Unit='' THEN S.Unit END AS blankOne, 
CASE WHEN S.Unit= U.UnitCode THEN S.Unit END AS MatchOne 
FROM Staff S, Unit U 
WHERE S.Unit= U.UnitCode 
+0

嗨,很好,有一个空白。但是当我执行这个声明时,空白记录将被复制到所有员工没有 – JLearner 2012-07-18 06:56:23

+0

无需选择*?它不起作用。崩溃我的sqlite – JLearner 2012-07-18 07:09:52

1

我认为你是left join后:

Select S.*, U.* 
    from Staff S 
    left join Unit U 
    on S.Unit= U.UnitCode 

这将检索所有工作人员记录和匹配的记录,从单位,如果存在的话。如果不是该单元的所有列都是空的。

相关问题