Reputation: 279
I am learning mysql and I am having trouble with one of my tables which produces #1066 - error not unique table alias. I have tried a number of different queries but all have the same result. Can someone put me out of my misery and help point out what I am doing wrong! - Thanks
Tables
looks
---------
look_id(Pk)
user_id
title
description
date_modified
Add_Look_Item
-----------------------
look_id (fk from table 1)
item_id (fk from table 3)
Item
--------------
item_id (pk)
name
details
Add_Images
-------------------
image_id (pk)
item_id (fk from table 3)
image_name
Queries I have tried - add_look_item is a compound key
SELECT DISTINCT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name FROM looks JOIN add_look_item ON add_look_item.look_id = looks.look_id
JOIN add_look_item ON add_look_item.item_id = item.item_id WHERE look.user_id = 94
#1066 - error not unique table alias 'add_look_item
SELECT DISTINCT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name FROM looks JOIN
add_look_item ON add_look_item.looks_id = look.look_id
JOIN add_look_item ON add_look_item.item_id = item.item_id
JOIN add_images ON add_images.item_id = item.item_id WHERE add_look_item.item_id = item.item_id AND look.user_id = 94
#1066 - error not unique table alias 'add_look_item
SELECT DISTINCT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name FROM looks INNER JOIN add_look_item ON add_look_item.look_id = look_look_id
INNER JOIN add_images ON add_images.item_id = item.item_id
INNER JOIN add_look_item ON add_look_item.item_id = item.item_id
WHERE look.user_id = 94
#1066 - error not unique table alias 'add_look_item
SELECT DISTINCT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name FROM looks
INNER JOIN add_look_item ON add_look_item.looks_id = look.look_id
INNER JOIN add_images ON add_images.item_id = item.item_id
INNER JOIN add_look_item ON add_look_item.item_id = item.item_id
WHERE add_look_item.item_id = item.item_id AND look.user_id = 94
#1066 - error not unique table alias 'add_look_item
SELECT DISTINCT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name FROM looks
INNER JOIN add_look_item ON add_look_item.looks_id = look.look_id
INNER JOIN add_images ON add_images.item_id = item.item_id
WHERE add_look_item.item_id = item.item_id AND look.user_id = 94
#1054 - Unknown column 'item.item_id' in 'where clause'
Thanks
Upvotes: 0
Views: 4849
Reputation: 12973
Try this -
SELECT looks.look_id, looks.title, looks.date_modified, add_look_item.item_id, add_images.image_name
FROM looks
JOIN add_look_item
ON looks.look_id = add_look_item.look_id
JOIN add_images
ON add_look_item.item_id = add_images.item_id
WHERE look.user_id = 94
Upvotes: 1
Reputation: 3957
Make an alias for add_look_item since you are joining it multiple times.
For example:
SELECT tbl.a, a.y, b.y
FROM tbl
JOIN tbl2 as a ON tbl.x = a.x
JOIN tbl2 as b ON tbl.x = b.x
Otherwise the query engine won't know what to do :)
Upvotes: 1