有沒有辦法寫有如下功能查詢,添加where子句的條件的方式,甲骨文條件where子句
select e.emp_id, emp.admin_user from employees e
如果emp.admin!= 'Y'
然後
查詢運行與where子句
其他
查詢運行時沒有where子句?
有沒有辦法寫有如下功能查詢,添加where子句的條件的方式,甲骨文條件where子句
select e.emp_id, emp.admin_user from employees e
如果emp.admin!= 'Y'
然後
查詢運行與where子句
其他
查詢運行時沒有where子句?
使用在WHERE子句應該做的伎倆一個CASE表達。如果條件不滿足時,如果你說你不需要where子句,那麼所有你想要的是像WHERE 1 = 1
這樣的條件,即當條件不滿足時返回所有行。所以,你需要像往常一樣使不符合條件TRUE。
例如,
我有一個僱員表,
SQL> SELECT empno, ename, deptno
2 FROM emp;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
7934 MILLER 10
14 rows selected.
SQL>
我想選擇員工的詳細信息,如果部門20,然後使用WHERE子句否則返回所有僱員的細節,但過濾器符合哪裏條件的部門。
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE ename =
4 CASE
5 WHEN deptno = 20
6 THEN 'SCOTT'
7 ELSE ename
8 END
9/
EMPNO ENAME DEPTNO
---------- ---------- ----------
7499 ALLEN 30
7521 WARD 30
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7934 MILLER 10
10 rows selected.
SQL>
因此,對於部門20,過濾器由where子句應用,我只得到了一行的ename SCOTT,對其他人而言,返回的所有行。
SELECT * FROM員工 WHERE PROJECT_ID在( CASE WHEN employees.ADMIN_USER!= 'Y',那麼 THEN (從PROJECTS_ACCESSIBLE_TO_USR中選擇不同的project_id,其中emp_id = 1002332) ELSE ename END )is this query is correct? – user3374229 2015-03-13 09:10:54
最好加入這兩張表。提供表格細節。編輯你的問題和所需的細節。 – 2015-03-13 09:31:52
如果它對您有幫助,請將其標記爲已回答。它也會幫助其他人。 – 2015-03-13 10:25:14
爲了保持簡單,我會在這種情況下使用union子句,以便您可以根據需要使用where子句。我試圖從上面的評論中猜測你的表格結構,我們來看看這個例子:
SQL> create table employees (emp_id number, admin_user number, project_id number);
Table created。
SQL> create table project_accessible_to_user (emp_id number, project_id number);
表創建。
現在進行簡單的UNION ALL兩個查詢一個用WHERE條件anoother沒有它
SQL> select * from employees e where e.admin_user!='Y' and project_id in
(select project_id from project_accessible_to_user where emp_id=e.emp_id)
union all
select * from employees e where (e.admin_user is null or
e.admin_user='Y');
UNION ALL是從視圖UNION表現好點,因爲這意味着它不檢查交叉值,所以如果有任何它會返回重複。但是在這種情況下,它已根據admin_user上的條件進行過濾,因此這些重複項不會發生。
一個簡單的解決方案是添加一個if語句來檢查條件,然後有兩個select,一個使用where子句,另一個不依賴於if語句的結果。 – Sim1 2015-03-13 08:09:28
您可以在where子句中使用** CASE **表達式。看到我的答案。 – 2015-03-13 08:34:32
select * from employees WHERE project_id in( CASE WHEN employees.ADMIN_USER!= 'Y',那麼 THEN(選擇PROJECTS_ACCESSIBLE_TO_USER不同的PROJECT_ID其中EMP_ID = 1002332) ELSE的ename END ) – user3374229 2015-03-13 09:11:21