WHERE COLUMN IN SELECT *... möglich?

Hallo Leute,

ich würde gern einen SQL query machen wobei ich die Conditions für einem Column von einem Subqery auslese.

Folgender massen:
WHERE COLUMN IN (SELECT *…)

Allerdings funktioniert dass nur wenn ich einen column anstatt * schreibe.
Ich würde allerdings den * benötigen.

Danke für eure Hilfe.

Lg,
Chris

Nein.
Moin, Chris,

Folgender massen:
WHERE COLUMN IN (SELECT *…)

ich übersetze das mal folgendermaßen:

 ... Where [Wert einer bestimmten Spalte] in
 (Select [beliebig viele Spalten] from ...

jetzt klar, warum das nicht gehen kann?

Gruß Ralf

Moin moin,

Ich würde allerdings den * benötigen.

Dann hast du ein Strukturellen Fehler wenn du meinst
das du das so lösen willst.

Hallo

Folgender massen:
WHERE COLUMN IN (SELECT *…)

Allerdings funktioniert dass nur wenn ich einen column anstatt
* schreibe.

Jep: Das funktioniert nur, wenn du die gleiche Spalte selektierst in dem Subselect, mit dem du später vergleichst. Anders würde es auch keinen Sinn machen. Anosten würdest du zB Äpfel mit „Äpfeln und Birnen“ vergleichen, dat geht net :smile:

Von daher verstehe ich nicht:

Ich würde allerdings den * benötigen.

Warum brauchst du das?

Gruß sadran

Hallo,

danke Ralf. Versteh ich, würde es allerdings eine andere Möglichkeit geben um dass so zu lösen?
z.B.: exist
oder funktioniert dass damit auch nicht?

Ich würde es zum zusammenfassen von 3 Tabellen benötigen:

1)Tabelle:
verschiedene ID´s von Einträgen aus der 2 Tabelle. Wobei die ID´s von autoincreasment stammen.

  1. Tabelle:
    Gleiche Einträge die in verschiedenen Sprachen sind.
    Jeder neuer Eintrag bekommt eine neue ID (auch jeder gleiche Eintrag in eine neue Sprache).

  2. Tabelle:
    Die ID´s von der 2 Tabelle die zusammen gehören, aber sich sprachlich unterscheiden, sind jeweils in einer Zeile festgehalten.

Jetzt möchte ich eine Berechnung damit anstellen und daher alle zusammenpassenden ID´s aus der 1 Tabelle zählen.

Da die Sprachen erweiterbar sein sollen ohne den Code zu verändern möchte ich gerne * (alle) aus einer Zeile auslesen.

Ich hoffe ich hab dass jetzt nicht zu kompliziert beschrieben. :smile:

Wenn du eine Lösung weißt gib mir bitte bescheid.

Lg,
Chris

Hallo Sandra,

danke, ich würde es zum Zusammenfassen von 3 Tabellen benötigen:

1)Tabelle:
verschiedene ID´s von Einträgen aus der 2 Tabelle. Wobei die ID´s von autoincreasment aus der 2 Tabelle stammen.

  1. Tabelle:
    Gleiche Einträge die in verschiedenen Sprachen sind.
    Jeder neuer Eintrag bekommt eine neue ID (auch jeder gleiche Eintrag in eine neue Sprache).

  2. Tabelle:
    Die ID´s von der 2 Tabelle die zusammen gehören, aber sich sprachlich unterscheiden, sind jeweils in einer Zeile festgehalten.

Jetzt möchte ich eine Berechnung damit anstellen und daher alle zusammenpassenden ID´s aus der 1 Tabelle zählen.

Da die Sprachen erweiterbar sein sollen ohne den Code zu verändern möchte ich gerne * (alle) aus einer Zeile von der 3 Tabelle zur Berechnung auslesen.

Ich hoffe ich hab dass jetzt nicht zu kompliziert beschrieben. :smile:

Wenn du eine Lsg weißt gib mir bitte bescheid.

Lg,
Chris

Hi Chris,

das ist mir zu abstrakt. Beschreib doch bitte die Tabellen in der Form

**Name** (<u>Id</u>, Attre1, Attr2, ..., FS-Attr1, ...)

dann schauen wir weiter.

Gruß Ralf

Moin moin,

ich vefürchte er sieht in tabellen sowas wie excel.
Sprich er nutzt gar nicht die struktur für datenbanken.

ID , name-int, name-en, name-de
1 , Map , Map , Karte
das müll

dann lieber
id , text , sprache
1 , MAP , int
1, MAP , en
1, MAP ,de

aber lassen wir uns mal wieder überraschen. bisher hat er jedenfals probleme
Fragen mit Informationen zu schreiben so das auch jemand ausserhalb seines gehirns was damit anfangen kann.

Hallo.

Sorry, ich komme noch nicht ganz mit.

Du möchtest also verschiedene Sprachen in unterschiedliche Spalten halten.

Du hast eine Tabelle A mit einer ID.
Die Spalte A enthält dann das gewünschte Resultat in Deutsch.
Die Spalte B in Englisch und so weiter.

Hab ich dich da richtig oder völlig falsch verstanden?

Dazu kann ich nur sagen, daß man das so auf keinen Fall macht.
Man hat eine Tabelle B mit einer Sprach-ID in einer Spalte und dem Sprachen-namen in einer zweiten Spalte.

Die Tabelle A würde man dann mit zwei ID´s realisieren Message-Id und Sprach-ID. Die Kombination aus Message-Id und Sprach-Id ist dann eindeutig. Message-id an sich und auch Sprach-Id dürfen öfters vorkommen.

Wenn du in der DB Deutsch (sprach-id 1) und Englisch (sprach-id 2) hälst, hast du zwei einträge für message-id

messsage-id sprach-id Test
1 1 Hallo Welt
1 2 Hello World.

Bezeichne doch mal deine 3 Tabellen mit A, B und C. Und beschreibe mal bitte, was die einzelnen Spalten enthalten sollen.

Vielleicht verstehe ich dann dein Problem besser.

Gruß Andreas

Hallo Ralf,

hmm ich versuch´s so gut wie es geht zu beschreiben.

Tabelle 1 (KID [Hier werden die Autoincrease Werte von Tabelle 2 eingefügt], Zahl, Zahl,…)

Tabelle2 (intID [Hier ist das Autoincrease was in Tabelle 1 und auch in 3 eingefügt wird], Text [jeweils nur in einer Sprache, z.B: Deutsch, English würd dann eine neue Zeile und eine neue ID bekommen])

Tabelle3 (intID.Deutsch, intID.English, intID.Französisch, intID.Russisch,…)

Deshalb möchte ich alle ID´s was in EINER ZEILE von Tabelle 3 stehen zusammenzufassen und
die Anzahl dieser Zahlen in TABELLE 1 (KID) zählen.

Ich hoffe es ist jetzt einfacher zu verstehen.

Lg,
Chris

Hallo Andreas,

also hab dass nicht ganz so gemeint.
Hier ist nochmals kurz eine Erklärung mit den Tabellen. Es gibt eine SprachID und eine MessageID in der Tabelle B

Tabelle A (KID [Hier werden die Autoincrease Werte von Tabelle 2 eingefügt], Zahl, Zahl,…)

TabelleB (intID [Hier ist das Autoincrease was in Tabelle 1 und auch in 3 eingefügt wird], SprachID, Text [jeweils nur in einer Sprache, z.B: Deutsch, English würd dann eine neue Zeile und eine neue ID bekommen])

TabelleC (intID.Deutsch, intID.English, intID.Französisch, intID.Russisch,…)

Deshalb möchte ich alle ID´s was in EINER ZEILE von Tabelle 3 stehen zusammenzufassen und
die Anzahl dieser Zahlen in TABELLE 1 (KID) zählen.

Ich hoffe es ist jetzt einfacher zu verstehen.

Lg,
Chris

Hallo,

danke, genauso hab ich´s gemacht.
Hab halt nie Informatik studiert oder damit viel zu tun gehabt, deshalb kann ich mich vielleicht auch nicht so ausdrücken, dass es leicht zum verstehen ist.

Hab jetzt einen weitere Erklärung gepostet. Vielleicht fällt dir ja etwas dazu ein. :smile:

Lg,
Chris

Hallo.

Warum brauchst du
„intID.Deutsch, intID.English, intID.Französisch, intID.Russisch,…“
??

Ganz konrekt hast du in der Tabelle B mehrere Einträge mit der ! gleichen ! intID und aber unterschiedlichen SprachId´s.

Daher brauchst du keine Zuordnung, welche intId zusammengehören.

Messages in TabelleB, die das gleiche meinen, aber in unterschiedlichen Sprachen, besitzen die gleiche intID.

Deswegen musst du dann nur noch in Tabelle B zählen, wieviel gleiche intID´s du hast für ein bestimmte intID, daß geht mit einem group-by, soweit ich mich recht erinnere.

Letzendlich willst du damit überprüfen (auch mit dem was du oben machen möchtest), wieviele Einträge für unterschiedliche Sprachen es tatsächlich in deiner DB gibt.

Ich denke, du musst von deiner Idee von „Autoincrease“ wert weg kommen. Man muss nicht in einer Tabelle eine Spalte haben, die für jede Zeile eindeutig ist. Man kann auch zwei Spalten zusammen nehmen, die dann insgesamt eindeutig sind, (wenn man umbedingt ein primary-key braucht)

Ich glaube aber, ich habe dich immer noch nicht ganz verstanden. Bitte veruch doch, das was du ermittelst umgangsprachlich auszudrücken und nicht bereits einen Pseudo-Code-Sprache zu verwenden.

Desweiteren wäre es Klasse, wenn du nur Tabelle A, B, C verwendestest. Ich habe jetzt einfach mal Tabelle 2 zB mit Tabelle B gleich gesetzt.

Gruß sadran

Hallo Sandra,

okay ich versuch´s nochmal sry.

In der Tabelle C (3) hab ich die ID´s die in Tabelle B eingetragen sind.
z.B: ID´s in Tabelle C
1Zeile: 5(Englisch), 23(Deutsch), 10(Französisch), 9(Italänisch)
2Zeile: 12(Englisch), 34(Deutsch), 18(Französisch), 13(Italänisch)

Jeweils 1 Zeile gehört zusammen und soll nicht mit der Zweiten Zeile vermischt werden.
Der Text zu den ID´s ist aufzufinden in Tabelle B

In Tabelle A sind diese Werte in einer Spalte vorhanden. Wobei diese unterschiedlich oft in einer Spalte vorhanden sind.
z.B: Spalte in Tabelle A
1Zeile: 10
2Zeile: 14
3Zeile: 10
4Zeile: 23
5Zeile: 14
6Zeile: 13
7Zeile: 11
8Zeile: 5

Von dieser Spalte von Tabelle A soll dann die Anzahl gezählt werden, welche in einer Zeile (Unterschiedlichen ID´s) in Tabelle C vorkommen.

In diesen Fall, bei dieser Spalte wäre das Ergebnis 4.

Ich hoff dass ist jetzt besser beschrieben.

Danke für deine Geduld.

Lg,
Chris

Hallo

Also erstmal: sadran - nicht sahra… ich bin m :smile:

Desweiteren, verstehe ich vorallem den Sinn dahinter nicht!

Ich werde wirklich nicht schault, was du damit machen willst.
Ich weiß auch nicht, wie du jetzt auf einmal auf die „4“ gekommen bist.

Vielleicht versteht jemand der hier mit liest dich besser?

Gruß sadran

nochmals zurück zu meinem vorherigen Umsetzung - meiner Meinung nach trifft die noch immer, das was du machen willst.

Tabelle B: braucht man nicht

sinn von Tabelle A habe ich immer noch nicht verstanden.

Tabelle C:

A B Text
1 1 Hallo Welt
1 2 Hello World
1 3 Bonjour mondio
2 1 Fehler
2 2 error
2 3 ne pas

C.A = Message-id
C.B = Id der Sprache
C.Text = der zugehörige Text

Aber ich glaube wir reden aneinander vorbei: ich verstehe nicht exakt was du willst - du verstehst offenbar meinen Ansatz nicht?

Gruß sadran

Es ist ihm leider unmöglich einfach klare beispiele entweder als bild oder als text zu posten. Das ist bei jeder Frage so.

Er will auch nicht wirklich wissen wie man es eigentlich macht, er will einfach nur wissen wie was geht, egal ob das richtig logisch oder irgent einen sin hat. Für ihn hat es sin. Problem ist eher, das der Laie trotz hinweis auf klarheit, es nicht schafft sein Problem einfach mal in Tabellen anschaulich mit ergebnissen untereinenader in einem PRE TAG zu formatieren.

Man wird aus dem nicht schlau , denn er wiederholt renitent immer wieder das gleiche , mal mit farbe , mal ohne farbe.

Du könntest ihm sogar tollte beispiele machen . Die übernimmt er dann auch nicht, sondern fängt wieder mit seinem eigenen konstrukten an.

Würd er einfach sachen so darstellen wie er es gelernt (gelesen hat) dann könnten wir das verstehen. Er hat aber schon lange seinen ganz eigenen stil und damit bleibt er voll auf der Strecke.

Noch mal ein Gundlegenden Tip :

solltes du Frager einen MySQL phpmyAdmin dein nennen.
Dann kannst du alles hier rein kopieren.

Tabelle anklicken und export . Dort dann kein Haken bei senden.

Das was du dann bekommst , kannst du kopieren :


– Datenbank: ‚fragen‘



– Tabellenstruktur für Tabelle ‚antworten‘

CREATE TABLE antworten (
idx int(11) NOT NULL AUTO_INCREMENT,
frageidx varchar(255) NOT NULL,
antworttext text NOT NULL,
gewicht varchar(255) NOT NULL,
PRIMARY KEY (idx)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


– Daten für Tabelle ‚antworten‘

INSERT INTO antworten (idx, frageidx, antworttext, gewicht) VALUES(1, ‚5‘, ‚Ja‘, ‚janein‘);
INSERT INTO antworten (idx, frageidx, antworttext, gewicht) VALUES(3, ‚6‘, ‚Ja‘, ‚janein‘);
INSERT INTO antworten (idx, frageidx, antworttext, gewicht) VALUES(5, ‚6a‘, ‚begrenzte Personalkapazität‘, ‚multieins‘);
INSERT INTO antworten (idx, frageidx, antworttext, gewicht) VALUES(6, ‚6a‘, ‚mangelndes Fachwissen‘, ‚multieins‘);

hat mich genau eine sekunde zeit genommen.


– Tabellenstruktur für Tabelle beantwortet

CREATE TABLE beantwortet (
idx int(11) NOT NULL AUTO_INCREMENT,
antwortidx int(11) NOT NULL,
gewicht int(11) NOT NULL,
usersid varchar(255) NOT NULL,
PRIMARY KEY (idx)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


– Daten für Tabelle beantwortet

INSERT INTO beantwortet (idx, antwortidx, gewicht, usersid) VALUES(5, 1, 1, ‚38slm33j919s2e9u8cfdm0kt17‘);
INSERT INTO beantwortet (idx, antwortidx, gewicht, usersid) VALUES(6, 2, 1, ‚38slm33j919s2e9u8cfdm0kt17‘);
INSERT INTO beantwortet (idx, antwortidx, gewicht, usersid) VALUES(7, 3, 1, ‚38slm33j919s2e9u8cfdm0kt17‘);

– Tabellenstruktur für Tabelle gewichtung

CREATE TABLE IF NOT EXISTS gewichtung (
idx int(11) NOT NULL AUTO_INCREMENT,
typ varchar(255) NOT NULL,
beschreibung text NOT NULL,
wert decimal(11,2) NOT NULL,
PRIMARY KEY (idx)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;


– Daten für Tabelle gewichtung

INSERT INTO gewichtung (idx, typ, beschreibung, wert) VALUES
(1, ‚janein‘, ‚Ja‘, ‚2.00‘),
(2, ‚janein‘, ‚Nein‘, ‚1.00‘),
(3, ‚multieins‘, ‚trifft voll und ganz zu‘, ‚1.00‘),
(4, ‚multieins‘, ‚trifft zu‘, ‚2.00‘),
(5, ‚multizwei‘, ‚kaum‘, ‚3.00‘),

Und jetzt kann der Fragestelelr noch ein paar SQL schreiben, wie er mit den Tabellen umgeht.

Erst jetzt wird überhaupt ersichtlich wie sich die Datenfelder und Tabellen verhalten und vor allem ob das SQL statement überhaupt so angewendet werden kann.

Wenn ich das gleiche mit weniger infos mache , weiss keiner was das werden soll. Und vor allem kann keiner Fehler erkennen oder was machbar ist.

Tabelle A
idx 1, typ janein , beschreibung Ja , wert 2.00
Tabelle B
idx 5, antwortidx 1, gewicht1, usersid 38slm33j919s2e9u8cfdm0kt17
Tabelle C
idx 1, frageidx 5, antworttext Ja, gewicht janein

Das bringt nix . Das kannst du gerne so im Excel Forum beschreiben,
aber nicht im Datenbank Forum. Denn es geht hier ncht um das was mann sieht. Es geht hier um die Logik der Datenstrukturen. Es kann mir also egal sein was für werte wo drinne sind, solange ich weiss wie die Struktur der Tabelle ist. Und komm mir nicht mit Zeile ?? Wir sind nicht in Excel. Es ist ein Datensatz . Die Datenfelder haben eine gewisse Aufgabe oder Einschränkung oder Merkmale . Das muss man wissen.
Bei Excel entfällt das, weil ist ja auch zum Rechnen gemacht worden und nicht zur Strukturierten Datenhaltung.

Lieber Frager , wie wäre es denn mal wenn du Dir ein Buch oder einen
Volkshochschul Kurs zu gemüte führst. Denn es ist äusserst unbefriedigend das Standard wissen immer wieder erklären zu müssen.

P.S. so kommst du doch nicht wirklich weiter. Auch bei Hobbys kann man erwarten das es um die Materie Datenbank geht und nicht um die Materie Excel tabelle mit Rechenkästchen.

Hallo Sadran,

danke den Ansatz von dir hab ich jetzt verstanden.
Is echt eine geniale Idee. Hab ich jetzt auch so gemacht mit der Message-id.

Entschuldigung, dass ich zuerst deinen Namen verwechselt habe.

Tabelle A ist ein Bewertungssystem für eine nationale oder internationale Suche, deshalb muss ich die Einträge zählen.

Werd es aber jetzt so machen, dass ich eine zusätzliche Spalte mit Message ID in Tabelle A dazufüge. So kann ich dann international auswerten.
Ich wollt am Anfang nach den einzelnen text-ids suchen die jeweils eine Message-id haben.
Da ich aber keine Lsg gefunden hab, mach ich es jetzt so.

Danke nochmal für deine Hilfe

Lg,
Chris

Hallo Ralf,

danke, jetzt versteh ich´s bissl besser.
Hab zwar die einzelnen Spalten, aber wenn ich dann alle Spalten nehme, ist dass dann wie in einer Spalte mehrere Werte. Also ein verstoß der 1 Norm.

Lg,
Chris