Ich habe zwei MySQL-Tabellen - eine Verkaufstabelle:
+----------------+------------------------------+------+-----+---------+-------+
| 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 | |
+----------------+------------------------------+------+-----+---------+-------+
und eine Artikeltabelle:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Die Verkaufstabelle enthält mehrere Datensätze für jede ItemID - einen für jede SaleWeek . Ich möchte alle verkauften Artikel auswählen, indem ich die beiden Tabellen wie folgt verbinde:
SELECT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Dies gibt jedoch mehrere ItemId - Werte basierend auf den mehreren Einträgen für jedes SaleWeek zurück. Kann ich eine bestimmte Auswahl treffen, um nur eine ItemID - zurückzugeben? Ich möchte nicht nach der neuesten SaleWeek fragen müssen, da einige Artikel möglicherweise keinen Eintrag für die neueste SaleWeek haben Ich muss den letzten Verkauf bekommen. Muss ichDISTINCTangeben oder LEFT OUTER JOIN verwenden?
Eine DISTINCT
sollte das tun, wonach Sie suchen:
SELECT DISTINCT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Das würde nur eindeutige items.ItemName, items.ItemId
-Tupel zurückgeben.
Sie hatten auch einen Kommentar zur Verkaufswoche. In der letzten Woche möchten Sie möglicherweise versuchen, GROUP BY zu verwenden
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
Möglicherweise müssen Sie ORDER BY in die Ordnungszahl für die 3. Spalte ändern, wenn Sie dies basierend auf dieser Spalte wünschen. Diese Abfrage gibt Ihnen jeden einzelnen Artikel UND die letzte Woche, in der er verkauft wurde.
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)
Das können wir nutzen:
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`