2014-06-13 7 views
0

Considérez le tableau ci-dessous et values..i doivent afficher toute la colonne et ses valeurs de la table « TAG » et la valeur d'une seule colonne d'une autre table nommée « ARTICLE »mysql-affichage différentes colonnes de plusieurs tables

TABLE NOM "TAG"

TAGID NAME RATE  
1 A 100 
2 B 200 
3 C 300 
4 D 8099 
5 E 400 
6 F 500 
7 G 600 
8 H 700 
9 I 200 
10 J 400 

TABLE NOM "ARTICLE"

ITEMID Name ITEM_QTY  
1 A 11 
2 B 22 
3 I 3 
4 A 8 
5 B 42 
6 C 5 
7 I 61 
8 B 74 
9 C 99 
10 A 48 

SORTIE PRÉVUE

TAGID NAME RATE ITEM_QTY 
1 A 100 48 - (VALUE OF LAST INSERTED RECORD) 
2 B 200 74 
3 C 300 99 
4 D 8099 0 
5 E 400 0 
6 F 500 0 
7 G 600 0 
8 H 700 0 
9 I 200 61 
10 J 400 0 

J'ai essayé une sorte de tous mais son cahiers vien ..

ceci est ma requête,

select * 
    from tag t1 
    join (select item_qty 
      from item t2 
      join tag t1 
    on t1.name=t2.name; 

quelqu'un peut me pls aider à sortir de ce problème ...

merci à l'avance ...

Répondre

0

essayer comme ça

select tag.id,tag.name,rate,qty from tag join 
(select qty,name from 
ITEM where ITEM.id in 
(select max(id) from ITEM group by name)) as tt on tt.name=tag.name 
0

Vous pouvez essayer comme

select 
t.tagid, 
t.name, 
t.rate, 
i.item_qty 
from tag t 
join 
(
    select name,max(item_qty) as item_qty 
    from item group by name 

)i 
on i.name = t.name 

DEMO

Si vous avez besoin de toutes les données de la table de l'élément que vous avez indiqué dans la sortie que vous pouvez utiliser jointure gauche au lieu de jointure interne

select 
t.tagid, 
t.name, 
t.rate, 
coalesce(i.item_qty,0) as item_qty 
from tag t 
left join 
(
    select name,max(item_qty) as item_qty 
    from item group by name 

)i 
on i.name = t.name 

DEMO

0

En supposant que le dernier enregistrement inséré ait l'ID le plus élevé dans votre tableau d'articles, vous devez d'abord obtenir l'identifiant le plus élevé par nom d'article. Avec cette requête (exécutée dans la requête suivante comme sous-requête) nous obtenons la ligne correspondante pour chaque max_id.

SELECT i.* 
FROM item i 
JOIN (
    SELECT 
    MAX(ITEMID) AS max_id 
    FROM 
    item 
    GROUP BY Name 
) si ON i.ITEMID = si.max_id; 

Voici d'autres exemples de la façon d'obtenir The Rows Holding the Group-wise Maximum of a Certain Column.

La requête finale est

SELECT TAGID, tag.NAME, RATE, COALESCE(ITEM_QTY, 0) AS ITEM_QTY 
FROM 
tag 
LEFT JOIN (
    SELECT i.* 
    FROM item i 
    JOIN (
     SELECT 
     MAX(ITEMID) AS max_id 
     FROM 
     item 
     GROUP BY Name 
    ) si ON i.ITEMID = si.max_id 
) items ON tag.Name = items.Name 
  • voir travailler en direct dans un sqlfiddle
Questions connexes