J'ai deux tables mysql - une table de vente:
+----------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------+------+-----+---------+-------+
| StoreId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemId | bigint(20) unsigned | NO | | NULL | |
| SaleWeek | int(10) unsigned | NO | PRI | NULL | |
+----------------+------------------------------+------+-----+---------+-------+
et une table d'articles:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Le tableau des ventes contient plusieurs enregistrements pour chaque ItemID - un pour chaque SaleWeek. Je veux sélectionner tous les articles vendus en joignant les deux tables comme ceci:
SELECT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Cependant, cela renvoie plusieurs valeurs ItemId basées sur les entrées multiples pour chaque SaleWeek. Puis-je faire une sélection distincte pour n'en renvoyer qu'une ItemID - Je ne veux pas avoir à rechercher la dernière SaleWeek car certains articles peuvent ne pas avoir d'entrée pour la dernière SaleWeek donc je dois obtenir la dernière vente. Dois-je spécifier DISTINCT ou utiliser un LEFT OUTER JOIN ou quelque chose?
Un DISTINCT
devrait faire ce que vous cherchez:
SELECT DISTINCT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Cela ne retournerait que des items.ItemName, items.ItemId
tuples.
Vous avez également commenté la semaine des soldes. Et en voulant la semaine la plus récente, vous voudrez peut-être essayer d'utiliser un GROUP BY
SELECT
items.ItemName,
items.ItemId,
max( Sales.SaleWeek ) MostRecentSaleWeek
FROM
items JOIN sales ON items.ItemId = sales.ItemId
WHERE
sales.StoreID = ?
GROUP BY
items.ItemID,
items.ItemName
ORDER BY
MostRecentSaleWeek, -- ordinal column number 3 via the MAX() call
items.ItemName
Vous devrez peut-être changer ORDER BY en référence à la 3e colonne ordinale si vous le souhaitez en fonction de cette colonne. Cette requête vous donnera chaque article distinct ET la semaine la plus récente où il a été vendu.
Nous pouvons utiliser ceci:
INSERT INTO `test_table` (`id`, `name`) SELECT DISTINCT
a.`employee_id`,b.`first_name` FROM `employee_leave_details`as a INNER JOIN
`employee_register` as b ON a.`employee_id` = b.`employee_id`
SELECT u.user_name,u.user_id, u.user_country,u.user_phone_no,ind.Industry_name,inv.id,u.user_email
FROM invitations inv
LEFT JOIN users u
ON inv.sender_id = u.user_id
LEFT JOIN employee_info ei
ON inv.sender_id=ei.employee_fb_id
LEFT JOIN industries ind
ON ei.industry_id=ind.id
WHERE inv.receiver_id='XXX'
AND inv.invitation_status='0'
AND inv.invitati
on_status_desc='PENDING'
GROUP BY (user_id)