MySQL INNER JOIN nutzen, um zwei Tabellen abzusuchen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    MySQL INNER JOIN nutzen, um zwei Tabellen abzusuchen

    Guten Tag,

    nach sehr vielen Tutorials habe ich mich nun mal wieder entschlossen, eine Frage zu stellen. Diese ist meiner Meinung nach etwas komplizierter, deshalb werde ich vorab alle Tabellen und Spalten nennen. Aber erstmal mein String:

    Quellcode

    1. "SELECT * FROM auftraege where besitzer = '" & Textbox1.text & "', produkte WHERE nummer= 'nummer'"


    Ich habe zwei Tabellen:
    [TABELLE]auftraege [SPALTEN]id;besitzer;nummer;anzahl
    [TABELLE]produkte [SPALTEN]nummer;name

    In "auftrage" werden mir alle Aufträge der Kunden angezeigt. Am Anfang steht die ID(des Auftrages), dann der Auftraggeber, dann die Produktnummer und dann Anzahl.
    In "produkte" werden mir alle Produkte mit Produktnummer und Namen angezeigt.

    Nun möchte ich meinen String so abändern, dass ich die erste Tabelle "auftraege" bekomme und die Namen aus der "produkte" Tabelle, die mit den Produktnummern in der Tabelle "auftraege" übereinstimmen.

    Ich bin relativ neu in VB.net und MySQL Datenbanken usw. Deshalb verstehe ich auch gefühlt alle Snippets im Internet nicht(und es gibt echt viele).
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sekki“ ()

    Ist das in deinem Sinne das ein Auftrag nur genau ein Produkt beinhalten kann?

    Unabhängig davon wäre SQL seitig die Abfrage so:

    SQL-Abfrage

    1. SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer where a.besitzer = '" & Textbox1.text & "', produkte WHERE a.nummer= 'nummer'


    Außerdem ist dein aktuelles Query anfällig für SQL Injection.
    Das ist meine Signatur und sie wird wunderbar sein!
    Folgender Fehler kommt dabei raus:

    Quellcode

    1. ​You have an error in your SQL syntax; check the manual that conrresponds to your MariaDB server version for the right syntax to unse near 'produkte WHERE a.nummer = 'nummer'


    Nach diesem Fehler kommt mir vielleicht in den Kopf, dass ich was das Thema angeht, noch einiges nicht verstanden habe.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Aufbau eines SQL-Statement: SELECT ... FROM ... WHERE ... ORDER BY ...
    Dabei können "WHERE ..." und/oder "ORDER BY ..." weggelassen werden. Das "FROM ..." kann wiederum eine Unterabfrage oder JOINs beinhalten.

    In deinem Beispiel tauchen jedoch zwei WHERE-Clauses auf. Ohne Begründung und der Syntax widersprechend.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Oh, hab dein Where kopiert OHNE es mir näher anzuschauen. Du hast ja 2 mal WHERE. Das ist quatsch..

    SQL-Abfrage

    1. SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer where a.besitzer = '" & Textbox1.text & "' AND a.nummer= 'nummer'


    Man darf immer nur ein Where verwenden und die Kriterien kann man kombinieren mit logischen Operatoren wie AND oder OR
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    Also müsste man den String von Mono nur abändern, richtig? Der Aufbau wäre noch gleich, oder? Könnte das vielleicht jemand machen? Ich blicke da einfach gar nicht durch.

    Edit:
    Mono war schneller. Ich teste es mal.

    Edit2:
    @Mono
    Ich erhalte den selben Fehler.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sekki“ ()

    SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer where a.besitzer = '" & Textbox1.text & "' AND a.nummer= & 'nummer'

    So?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo
    Nun versteht er "& 'nummer'" nicht. Ganz am Ende.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Also.

    Was ist Nummer für ein Datentyp? Vermutlich int?

    SQL-Abfrage

    1. SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer where a.besitzer = '" & Textbox1.text & "' AND a.nummer= 3


    Also wäre das zB die Abfrage für Nummer 3.
    Das ist meine Signatur und sie wird wunderbar sein!
    Es kommt zwar keine Fehlermeldung, aber was ist mir "3" gemeint?
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Sekki schrieb:

    aber was ist mir "3" gemeint?

    Bitte beschäftige dich dringend mehr mit SQL und zeige ein wenig mehr initiative. 3 soll die Nummer des Produkts darstellen (so als Beispiel).

    So, hab ma eben deine DB nachgebaut. so geht es:

    Hier bekommst du alle Spalten und Datensätze beider Tabellen

    SQL-Abfrage

    1. SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer


    Willst die die Ergebnisse weiter einschränken,z.B. auf den Besitzer, brauchst du eine Bedingung (WHERE)

    SQL-Abfrage

    1. SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer
    2. WHERE besitzer = 'Moritz'


    In VB.NET kann das SQL-Statement natürlich nicht einfach so hingeschrieben werden, das sähe dann so aus (Copy and Paste fähig):

    VB.NET-Quellcode

    1. Dim SQL As String = "SELECT a.*, p.name FROM auftraege a inner join produkte p on a.nummer = p.nummer "


    Den String SQL kannst du jetzt so wie er ist an deine Datenbank schicken, die gibt dir dann eine Tabelle aller Daten mit den Spalten beider Tabellen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Nach einer langen Zeit melde ich mich mal wieder. Ich entschuldige mich für die lange Lücke im Thread, ich musste dringend aushelfen und konnte mich dann nicht mehr um meine Angelegenheiten kümmern.

    Ich wünschte, ich könnte euch genug initiative mitbringen, doch leider fällt es mir zurzeit verdammt schwer. Ich bin bei allem verwirrt. Ich habe mir SQL angesehen und ich arbeite damit ja auch öfters in MySQL aber für mich sind das gefühlt Welten Abstand bei der "Übersetzung". Ich weiß nicht, warum.

    Ich habe nun die Datenbank neu aufgesetzt und dabei die Spaltennamen geändert. Die alten haben dem Team und mir einfach nicht mehr gepasst und sorgten für Verwirrung in unseren Listen. Deshalb haben wir denen nun bestimmte Namen gegeben. Vergisst am besten alles, was ihr über die alten Namen wisst.



    VB.NET-Quellcode

    1. ​SELECT a.*, p.name FROM Items a inner join Item_Liste p on a.num = p.num WHERE owner = '3'


    Folgende Meldung erhalte ich: "Could not find specifed column in results: Lats Setzling"
    Habe ich mich hier vielleicht beim Umbenennen vertan und irgendwie die Spalten vertauscht? Ich sehe dort nämlich keinen Fehler. Und hier ein wenig spezifischer, damit ihr nicht nachfragen müsst:

    Wenn ich nun "reader("num") nutze, findet er alle Nummern und die sind auch richtig, dass habe ich überprüft. Suche ich aber nach "reader(s)" (s = reader("name") jedoch in einem byte(), weil die Spalte ein anderes Format(?) hat.) spuckt er diese Fehlermeldung aus. Liegt der Fehler bei mir oder seht ihr den Übeltäter?
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Lass den reader weg, und nimm den Adapter. Diesen kannst du verwenden um deine DataTable zu füllen. Um.das SQL Statement kommst du hierbei trotzdem nicht herum:

    -> net-informations.com/vbprj/dat…r/vb-dataAdapter-fill.htm
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen