簡體   English   中英

SQL Developer AND或語句

[英]SQL Developer AND OR Statements

我的工作是使用SQL Developer將不同表中的多個字段合並為一張表。 我對SQL不熟悉,但是設法建立了一些東西。 查看我的輸出了解到我內置的限制不起作用。 簡短說明如下。 有人可以幫幫我嗎?! 在我的輸出中,我仍然在ATINN字段中看到1006以外的值,在BWTAR字段中看到thamEmpty的其他值。我在做什么錯?

  1. 5張桌子連在一起

  2. 對用戶的限制(DMSTRAATL等)

  3. 對產品組的限制(006 *等)

  4. 對某些個別產品的限制

  5. 對產品類型的限制(草葯等)

  6. 對特定數據字段的限制(所有產品的atinn = 1006)

  7. 對特定數據字段的限制(所有產品的bwtar =空)


SELECT 
    dmssap.mara.matnr, dmssap.mara.mtart, dmssap.mara.matkl, 
    dmssap.mara.ersda, dmssap.mara.ernam, dmssap.mara.bismt, 
    dmssap.marc.werks, dmssap.inob.cuobj, 
    LPAD(INOB.CUOBJ, 18, '0') AS CUOBJ_18, dmssap.ZMM_MATNR_MPO.matnr, dmssap.ZMM_MATNR_MPO.pname, 
    dmssap.ZMM_MATNR_MPO.stat, dmssap.mbew.bwkey, dmssap.mbew.bklas, 
    dmssap.mbew.bwtar, dmssap.mbew.vprsv, dmssap.mbew.bwtty, dmssap.mbew.verpr,
    dmssap.mbew.stprs, dmssap.ZMM_MATNR_MPO.matnr, dmssap.ZMM_MATNR_MPO.pname, 
    dmssap.ZMM_MATNR_MPO.stat, dmssap.ausp.atinn, dmssap.ausp.atwrt
FROM dmssap.mara
LEFT OUTER JOIN dmssap.marc
    ON (dmssap.marc.matnr) = (dmssap.mara.matnr) 
LEFT OUTER JOIN dmssap.ZMM_MATNR_MPO
    ON (dmssap.ZMM_MATNR_MPO.matnr) = (dmssap.mara.matnr)
LEFT OUTER JOIN dmssap.mbew
    ON CONCAT(dmssap.mbew.matnr, dmssap.mbew.bwkey) = CONCAT(dmssap.marc.matnr, dmssap.marc.werks)
LEFT OUTER JOIN dmssap.inob
    ON (dmssap.inob.objek) = (dmssap.mara.matnr)
LEFT OUTER JOIN dmssap.ausp
    ON dmssap.ausp.objek = LPAD(INOB.CUOBJ, 18, '0')
WHERE (dmssap.mara.ernam) IN (
    'DMSTRAATL', 'V0342628', 'V0343809', 
    'V0336003', 'V0009830', 'V0309577', 'V0010144'
)
AND (dmssap.mara.matkl) IN (
    '006*', '007120',    '007130',    '007140',    '007170',    
    '007180',    '007210',    '007220',    '007230',    
    '007250',    '007270',    '007280',    '007290',    
    '007300',    '007320',    '007340',    
    '007370',    '007380',    '007400',    '007420'
)
OR (dmssap.mara.matnr) IN (
    '000000010001767697',     '000000010001870117',     '000000010001870116',     '000000010001870115',    
    '000000010001870114',     '000000010001870113',     '000000010001870112'
)
AND (dmssap.mara.mtart) IN ('HERB', 'HALB', 'ZSTP')
AND (dmssap.ausp.atinn) = '1006'
AND (dmssap.mbew.bwtar) IS NULL;

AND運算符的優先級比OR更高。 為了使您的查詢易於閱讀,請在過濾器子句周圍使用大括號()。

假設您要選擇在dmssap.mara.matkl中具有某些值或在dmssap.mara.matnr中具有某些值的記錄,然后可以在這些塊之間使用大括號,如下所示。

AND (
(dmssap.mara.matkl) IN (
    '006*', '007120',    '007130',    '007140',    '007170',    
    '007180',    '007210',    '007220',    '007230',    
    '007250',    '007270',    '007280',    '007290',    
    '007300',    '007320',    '007340',    
    '007370',    '007380',    '007400',    '007420'
)
OR (dmssap.mara.matnr) IN (
    '000000010001767697',     '000000010001870117',     '000000010001870116',     '000000010001870115',    
    '000000010001870114',     '000000010001870113',     '000000010001870112'
)
)
WHERE (dmssap.mara.ernam) IN (
    'DMSTRAATL', 'V0342628', 'V0343809', 
    'V0336003', 'V0009830', 'V0309577', 'V0010144'
)
AND (dmssap.mara.matkl) IN (
    '006*', '007120',    '007130',    '007140',    '007170',    
    '007180',    '007210',    '007220',    '007230',    
    '007250',    '007270',    '007280',    '007290',    
    '007300',    '007320',    '007340',    
    '007370',    '007380',    '007400',    '007420'
)
OR (dmssap.mara.matnr) IN (
    '000000010001767697',     '000000010001870117',     '000000010001870116',     '000000010001870115',    
    '000000010001870114',     '000000010001870113',     '000000010001870112'
)
AND (dmssap.mara.mtart) IN ('HERB', 'HALB', 'ZSTP')
AND (dmssap.ausp.atinn) = '1006'
AND (dmssap.mbew.bwtar) IS NULL;

關鍵在您的WHERE語句中。 評估順序中的關鍵字WHERE語句NOT - > AND - > OR

您似乎想要的是這個:

WHERE (dmssap.mara.ernam) IN (
    'DMSTRAATL', 'V0342628', 'V0343809', 
    'V0336003', 'V0009830', 'V0309577', 'V0010144'
)
AND (dmssap.mara.matkl) IN ((
    '006*', '007120',    '007130',    '007140',    '007170',    
    '007180',    '007210',    '007220',    '007230',    
    '007250',    '007270',    '007280',    '007290',    
    '007300',    '007320',    '007340',    
    '007370',    '007380',    '007400',    '007420'
)
OR (dmssap.mara.matnr) IN (
    '000000010001767697',     '000000010001870117',     '000000010001870116',     '000000010001870115',    
    '000000010001870114',     '000000010001870113',     '000000010001870112'
))
AND (dmssap.mara.mtart) IN ('HERB', 'HALB', 'ZSTP')
AND (dmssap.ausp.atinn) = '1006'
AND (dmssap.mbew.bwtar) IS NULL;

請注意AND上OR的兩個額外括號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM