Beim Abrufen von Daten aus mehreren Tabellen: Wie erfolgt eine Abfrage basierend auf Einträgen in der Tabelle in der SQL-Gruppierung?
P粉038856725
P粉038856725 2024-04-04 08:58:17
0
1
453

Ich habe zwei Tische

  1. Klicken Sie auf 2.Fahrt

Klicken Sie auf die Tabelle

id |. Zeit

Fahrplan

id |. Zeitstempel

Ich möchte Daten aus zwei Tabellen erhalten. GROUP BY EXTRACT(DAY FROMride.timestamp) Ich erhalte die Daten aber nur dann, wenn ich in beiden Tabellen Einträge für denselben Tag habe, aber ich benötige die Daten unabhängig davon, ob beide Tabellen keine Daten enthalten. Ich weiß nicht, ob OUTER Join eine Antwort ist, aber MySQL unterstützt OUTER JOIN nicht

Meine aktuelle Abfrage erhält die Daten nur, wenn in beiden Tabellen Einträge vorhanden sind

COUNT(distinct ride.id) AS ride_ads, 
COUNT(distinct clicks.id) AS clicks
FROM ride INNER JOIN clicks ON EXTRACT(DAY FROM ride.timestamp)=EXTRACT(DAY FROM clicks.time)
GROUP BY EXTRACT(DAY FROM ride.timestamp), EXTRACT(DAY FROM clicks.time)```

P粉038856725
P粉038856725

Antworte allen(1)
P粉529245050
SELECT 
    DATE(ride.timestamp) AS Day,
    COUNT(DISTINCT ride.id) AS ride_ads,
    COUNT(DISTINCT clicks.id) AS clicks
FROM
    ride
        LEFT JOIN
    clicks ON DATE(ride.timestamp) = DATE(clicks.time)
WHERE
    DATE(ride.timestamp) > NOW() - INTERVAL 15 DAY
GROUP BY Day 
UNION SELECT 
    DATE(clicks.time) AS Day, #selecting date from second table since I might have record in this table and I am using group by Day 
    COUNT(DISTINCT ride.id) AS ride_ads,
    COUNT(DISTINCT clicks.id) AS clicks
FROM
    ride
        RIGHT JOIN
    clicks ON DATE(ride.timestamp) = DATE(clicks.time)
WHERE
    DATE(clicks.time) > NOW() - INTERVAL 15 DAY
GROUP BY Day
ORDER BY Day
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage