jenslm: zwei SQL Abfragen verbingen

Macht es Sinn die folgenden zwei Abfragen zu verbinden?

1.Abfrage:
SELECT id, feld1 FROM tab1 WHERE var = 'xx';

2.Abfrage
SELECT feld2, feld3 FROM tab2 WHERE sid = 'id der ersten Abfrage';

Tabellen dazu:

tab1

id | feld1 | var
----------------
1  | wert  | xx
----------------

tab2

id | sid | feld2 | feld3
------------------------
1  |  1  | wert  | wert

mit sid ist die zweite Tabelle mit der Ersten "verknüpft".

Wenn ja, wie stelle ich dass an?

Lg, Jens

  1. demnach wäre meine Abfrage dann:

    SELECT a.id, a.feld1, b.feld2, b.feld3 FROM tab1 a, tab2 b WHERE a.var = 'xx' AND b.sid = a.id;

    nur leider erhalte ich dann mit

    $result = mysql_query($sql, $database) or die(mysql_error());  
      
    do  
    {  
    	echo $row['a.feld1'];  
    }  
    while($row = mysql_fetch_assoc($result));
    

    keine Ausgabe?!
    LG

  2. Hallo,

    SELECT id, feld1 FROM tab1 WHERE var = 'xx';

    2.Abfrage
    SELECT feld2, feld3 FROM tab2 WHERE sid = 'id der ersten Abfrage';

    Wenn ja, wie stelle ich dass an?

    mit einem Join

    SELECT  
        tab2.feld2,  
        tab2.feld3  
    FROM  
        tab2  
    INNER JOIN  
        tab1  
    ON  
        tab2.sid = tab1.id  
    WHERE  
        tab1.var = <wert>  
    
    

    oder einem Subselect.

    SELECT  
        tab2.feld2,  
        tab2.feld3  
    FROM  
        tab2  
    WHERE  
        sid IN (                -- Beachte: es könnte mehr als eine ID  
                                -- den gewünschten Wert haben  
             SELECT  
                id  
            FROM  
                tab1  
            WHERE  
                var = <wert>  
        )  
    
    

    EXPLAIN (bzw. das vergleichbare Werkzeug Deines Datenbankmanagementsystems) kann Dir sagen, was bei Deinen Tabellen effizienter ist.

    Freundliche Grüße

    Vinzenz

    1.   
      SELECT  
          tab2.feld2,  
          tab2.feld3  
      FROM  
          tab2  
      INNER JOIN  
          tab1  
      ON  
          tab2.sid = tab1.id  
      WHERE  
          tab1.var = <wert>  
      
      

      funktioniert dass?! Mittlerweile sieht die Sache nämlich so aus:

      tab1
      id1 | feld1 | feld2
      ------------------
      1  | test  | test2
      ------------------
      2  | info  | info2

      tab2
      id2 | tab1-id | feld3
      ---------------------
      1  | 1       | hallo
      ---------------------
      2  | 2       | ciao
      ---------------------
      3  | 2       | was

      tab3
      id3 | tab2-id | feld4 | feld5
      -----------------------------
      1  | 2       | aktiv | rot
      -----------------------------
      2  | 1       | passiv| blau

      Jetzt möchte ich für die spätere Verwendung Folgendes, nur funktioniert dass so nicht...ich möchte damit nur versuchen zu verdeutlichen worum es mir geht!

        
      SELECT feld3, feld4, feld5 FROM tab1, tab2, tab3 WHERE feld1 = 'wert' AND feld2 = 'wert' AND tab1-id = id1 AND tab2-id = id2  
      
      

      versucht habe ich das Ganze dann so:

        
      SELECT b.feld3, c.feld4, c.feld5 FROM tab1 a, tab2 b, tab3 c WHERE a.feld1 = 'wert' AND a.feld2 = 'wert' AND b.tab1-id = a.id1 AND c.tab2-id = b.id2;  
      
      

      müsste so doch eigentlich funktionieren oder brauche ich zwingend den INNER JOIN?
      Und wie soll ich dass dann machen? Ich brauch ja die Werte aus zwei Tabellen!?
      So funktioniert es auch nicht:

      SELECT b.feld3, c.feld4, c.feld5 FROM tab2 b, tab3 c INNER JOIN tab1 a ON b.tab1-id = a.id WHERE a.feld1 = 'wert' AND a.feld2 = 'wert' AND c.tab2-id = b.id2;

      vor allem weil hier ja eigentlich auch noch ein zweiter INNER JOIN rein müsste oder?!

      alle drei Versionen geben mir GAR NICHTS aus!
      wie könnte man das lösen?
      lg

      1. und auch mit einem INNER JOIN funktioniert es nicht

        tab1 (a)
        id | feld1 | feld2 | feld3
        --------------------------
        1  | test  | info  | blau
        --------------------------

        tab2 (b)
        id | tab1-id | feld4 | feld5
        -----------------------------
        1  | 1       | hallo | ciao
        -----------------------------

        SELECT a.feld3, b.feld4, b.feld5 FROM tab2 b INNER JOIN tab1 a ON b.tab1-id = a.id WHERE a.feld1 = 'wert' AND a.feld2 = 'wert';

        ebenfalls KEINE Ausgabe!
        Ich nehme mal an dass es daran liegt, dass ich Felder aus beiden Tabellen abfragen will (a.feld3, b.feld4, b.feld5) oder habe ich was anderes falsch gemacht / verstanden? Wie könnte ich das lösen?
        Lg

        1. mal nebenbei zu erwähnen wäre da noch dass der SQL-Befehl in phpMyAdmin funktioniert und mir die gewünschten Werte präsentiert!
          Also muss dass ja an der Ausgabe liegen?!

            
          $result = mysql_query($sql, $database) or die(mysql_error());  
            
          do  
          {  
          	echo $row['a.pfix'];  
          }  
          while($row = mysql_fetch_assoc($result));  
          
          

          LG

          1. LÖSUNG

            $result = mysql_query($sql, $database) or die(mysql_error());

            do
            {
                    echo $row['pfix']; //Tabelle nicht notieren
            }
            while($row = mysql_fetch_assoc($result));

            Eigene Dummheit ein Alias zu verwenden der nur den SQL-Befehlen zur Verfügung steht. Geklärt. Danke an alle.
            Lg