我有这个mysql查询
SELECT bm_events.name AS event_name,
bm_events.uid AS event_uid,
bm_events.organising,
bm_organising_company.uid,
bm_organising_company.name
FROM bm_events LEFT JOIN bm_organising_company
ON bm_events.organising = bm_organising_company.uid
这是结果
Acontraluz 68 66,90 66 Advanced Music S.L.
列“bm_events.organising”是一个逗号分隔值的varchar。
因为“bm_events.organising”在bm_events表上等于“66,90”,我希望bm_organising_company.uid,bm_organising_company.name没有结果。
你能解释一下我为什么得到bm_organising_company.uid = 66的结果吗?
谢谢:)
答案 0 :(得分:0)
这是您的查询:
SELECT e.name as event_name, e.uid as event_uid, e.organising, oc.uid, oc.name
from bm_events e left join
bm_organising_company oc
on e.organising = oc.uid
如评论中所述,您可以比较字符串和数字。这是您的问题的表现,您可以使用find_in_set()
修复它:
on find_in_set(oc.uid, e.organizing)
但是,这不是问题的根源。导致问题的主要原因是您将整数列表存储在字符串中。以下是您不想这样做的原因:
所以,你应该有一个名为OrganizingUsers
的表,每个“event”有一行,每个“user”。这称为联结表,是在SQL中表示列表的正确方法。