2017-05-29 3 views
1

Ich versuche, eine if else-Bedingung in dieser Select-Anweisung zu haben. Ich übergebe entweder eine customerID oder eine accountID in diesen Mapper und so muss ich überprüfen, welche übergeben wird. Ich hatte den ersten Fall, wo es keine customerId (also accountId wurde übergeben), und so die innere Verbindung durchgeführt wird. Die zweite ist, wenn es keine accountID (also customerId wurde bestanden). Dann, am Ende der Fälle, möchte ich es nach absteigenden Daten sortieren.SQL-Syntaxfehler bei der Verwendung von Fällen in einem SELECT

SELECT i.invoice_id, i.account_id, total_amount_due, due_date, bp.eff_date, bp.end_date, total_amount_due 
     (
     CASE 
      WHEN customerId = null 
       THEN INNER JOIN server.bill_periods bp ON bp.invoice_id = i.invoice_id 
        WHERE account_id=#{accountId} 

      ELSE INNER JOIN server.bill_periods bp ON bp.invoice_id = i.invoice_id 
       INNER JOIN server.cust_acct_rel car ON car.account_id = i.account_id 
        WHERE car.customer_id=#{customerId} 
     END)   
    ORDER BY end_date DESC 

Allerdings, wenn ich dies ausführen, bekomme ich diesen Fehler.

org.apache.ibatis.exceptions.PersistenceException: 
Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN server.bill_periods bp ON bp.invoice_id = i.invoice_id WHERE ' at line 5 

Weiß jemand, was ich hier falsch mache?

+0

Ihr Code macht keinen Sinn. Zum Beispiel gibt es keine 'FROM'-Klausel. –

+0

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql- Abfrage – Strawberry

+0

wahrscheinlich ein neues Konstrukt der Tabellen über Case-Anweisungen zu verbinden – maSTAShuFu

Antwort

0

Verwendung IFNULL

select ...,..., IFNULL(customerID,accountID) newid 
from 
    table1 
    left outer join table2 
order by date desc 
Verwandte Themen