Ich habe ein paar SQL-Tabellen, die mit FOS, Schlüsselwörter und PRef bezeichnet werden. Ihre Struktur und Beziehungen sind wie folgt:SQL-Zählung und mehrere Unterabfragen in großen Tabellen
+------------------+ +------------------+ +-----------------+
| FOS | | keywords | | PRef |
+------------------+ +------------------+ +-----------------+
|fosID (PK) |--+ |pkID (PK) | +---|pID1 (PK) |
|fosName | +---|fosID(FK) | +---|pID2 (PK) |
+------------------+ |paperID (FK) |--+ +-----------------+
(53k+ rows) +------------------+ (952M+ rows)
(157M+ rows)
Zur Zeit kann ich es tun, indem Sie einen einzelnen fosID zu meiner Anfrage liefern, aber da die fos Tabelle über 1k Datensätze enthält, ich habe nicht genug Personal, um manuell jede fosID zu füttern und erhalten ihre entsprechenden rowCount dann alle Ergebnisse verschmelzenden
declare @fosID varchar(10)='1234567890';--my fosID
select fos.fosID,fos.fosName,count(*) as rowCount
from PRef pr left join FOS fos on [email protected]
where
pr.pID1 in(SELECT paperID FROM keywords k where [email protected])
OR pr.pID2 in(SELECT paperID FROM keywords k where [email protected])
group by fos.fosID,fos.fosName
dann gibt es ein korrektes Ergebnis wie:
+----------+--------+----------+
|fosID |fosName |rowCount |
+----------+--------+----------+
|1234567890|name1 |34 |
+----------+--------+----------+
Jetzt möchte ich eine Liste aller fos bekommen i systems und Anzahl der Datensätze in PRef für jeden der 53k + fos-Artikel.
Ich habe versucht, das Teil in where [email protected]
zu where k.fosID in (select fosID from FOS)
geändert, aber weniger zählen wurde produziert.
Irgendwelche Vorschläge zur Lösung dieses Problems?
P.S. Ich suche jetzt bei Cursor aber die Leistung ist wirklich ... wirklich langsam
Edit 1: Erwartete Ergebnisse:
+----------+--------+----------+
|fosID |fosName |rowCount |
+----------+--------+----------+
|1234567890|name1 |34 |
|1234567891|name2 |3 |
|1234567892|name3 |23 |
|..... |.... |... |
+----------+--------+----------+
(exact same number of rows as table FOS)
nur um klar zu sein, wollen Sie die Zeilen der 'PRef' Tabelle zählen, die' pID1' oder 'pID2'' fosID' enthalten? – Turbot
Was ist die erwartete Ausgabe? – Squirrel
Ich zähle die Anzahl der Zeilen in der Tabelle 'PRef', dass entweder die Spalte' pID1' oder/und 'pID2' durch die Tabelle' keywords' in die Tabelle 'fosID' gemappt wird. – Runescapenoob