Reputation: 9443
Assuming i have 2 tables in my database. person
and person_purchased_item
.
person
id name has_purchased
1 Joe 1
2 Mark 0
3 Harry 0
4 Norly 1
5 Freya 0
person_purchased_item
id person_id item_code
1 1 1001
2 1 1002
3 1 1003
4 1 1004
5 4 1005
In this case i would like to get the purchased items of a particular person, and also query those who never made any purchase.
case 1
query:
SELECT
person.id, person.name, person_purchased_item.item_code
FROM person INNER JOIN person_purchased_item
ON person.id = person_purchased_item.person_id
WHERE has_purchased = 1 AND id = 1;
results:
id name item_code
1 Joe 1001
1 Joe 1002
1 Joe 1003
1 Joe 1004
case 2
query:
SELECT * FROM person WHERE has_purchased <> 1;
results:
id name has_purchased
2 Mark 0
3 Harry 0
5 Freya 0
Now here comes the problem:
How can write a query that insert all Joe's purchased items to every person who never made any purchased? So that each one of them will have Joe's purchased items.
Upvotes: 2
Views: 24
Reputation: 521209
Insert a cross join of Joe's purchase records with all the people who have not yet made a purchase:
INSERT INTO person_purchased_item (person_id, item_code)
SELECT p1.id, p2.item_code
FROM person p1
CROSS JOIN person_purchased_item p2
WHERE
p1.has_purchased = 0 AND p2.person_id = 1;
Upvotes: 1