2017-05-09 5 views
1
  • tabelle1: id, Jahr, Monat, ...
  • table2: id, Datum, ...

Was ich bin Der Versuch, die unterschiedlichen Werte von Monaten aus beiden Tabellen für ein bestimmtes Jahr (Beispiel: 2017) und für eine bestimmte ID () zu erhalten, beachten Sie, dass Tabelle1 Jahr und Monat als separate Felder haben, während Tabelle2 ein vollständiges Datum als einzelnes Feld haben)abrufen verschiedene Werte mit verschiedenen Feldern Name und Typ aus zwei Tabellen Orakel

Ich schrieb diese Abfrage:

SELECT DISTINCT month 
    FROM table1 
    JOIN table2 
    ON table1.month = table2.(to_char(date,'mm')) 
WHERE table1.year=2017 
    AND id=406; 

ich diese Störung erhalte:

ORA-01747: invalid user.table.column, table.column, or column specification 
01747. 00000 - "invalid user.table.column, table.column, or column specification" 

wie für das Szenario enthält tabelle1 ein Stück Element Bezahlung und anderes Pay-Element enthält Tabelle 2, Mitarbeiter konnten einen Eintrag in beide für das gleiche haben Monat oder ein eindeutiger Eintrag in einer der Tabellen für einen anderen Monat, das Problem ist, dass ich die Anzahl der aus 12 bezahlten Monate zählen muss (ich möchte nicht, dass der gleiche Monat wiederholt wird)

Antwort

2

Die Alias ​​wird kommen innerhalb des Funktionsaufrufs.

Sie wollen wahrscheinlich:

select distinct t1.month 
from table1 t1 
join table2 t2 on t1.month = to_char(t2.date, 'mm') 
where t1.year = 2017 
    and id = 406; 

Verwenden Sie auch kurze sinnvolle Aliase Lesbarkeit zu unterstützen.

1

Versuchen Sie die folgende Abfrage. Beachten Sie, dass das Zusammenfügen der beiden Tabellen nach Datum den Vergleich von des Jahres und des Monats erfordert.

select distinct t1.month 
from table1 t1 
inner join table2 t2 
    on t1.month = to_char(t2.date, 'mm') and 
     t1.year = to_char(t2.date, 'yyyy') 
where t1.year = 2017 and 
     id = 406; 

Sie sollten Ihr Tabellendesign ändern und den Tag, den Monat und das Jahr nicht in separaten Spalten speichern.

Verwandte Themen