如何在MySQL中对IN语句进行部分匹配
我将多个表连接到一个查询中。我需要对in语句中的值进行部分匹配。这里有一个例子如何在MySQL中对IN语句进行部分匹配,mysql,Mysql,我将多个表连接到一个查询中。我需要对in语句中的值进行部分匹配。这里有一个例子 SELECT DISTINCT am.id AS id, am.flagged AS flagged, am.name AS name, am.type AS type, am.file AS file, am.s3_tag AS s3_tag, am.low_s3_tag AS low_s3_tag FROM accounts_media am
SELECT DISTINCT
am.id AS id,
am.flagged AS flagged,
am.name AS name,
am.type AS type,
am.file AS file,
am.s3_tag AS s3_tag,
am.low_s3_tag AS low_s3_tag
FROM accounts_media am
LEFT JOIN accounts_location_media alm ON am.id = alm.media_id
LEFT JOIN accounts_location al ON al.id = alm.location_id
LEFT JOIN accounts_person_media apm ON am.id = apm.media_id
LEFT JOIN accounts_person ap ON ap.id = apm.person_id
LEFT JOIN accounts_event_media_record aemr ON am.id=aemr.media_id
LEFT JOIN accounts_medianote_media_record amma ON am.id=amma.media_id
LEFT JOIN accounts_medianote amn ON amma.medianote_id=amn.id
WHERE
am.account_id = '1234'
AND am.flagged = FALSE
AND ('Da' IN (SELECT first_name FROM accounts_person WHERE account_id = '1234')
AND ('Rob' IN (SELECT first_name FROM accounts_person WHERE account_id = '1234')
在
和“Da”中的“从帐户中选择第一个\u姓名,其中帐户\u id='1234'
语句表中有表示“Dan”、“Daniel”等的值。还有“Rob”和“Robert”。我需要那个语句来确保表中包含“Da”的名称和任何包含“Rob”的名称。有办法做到这一点吗
因此,一条记录可以链接到accounts\u person表中的多个人。假设我有三张唱片
记录一:一个叫丹的人附在记录上
记录二:一个名叫罗伯特的人附在记录上
记录三:一个叫丹的人和一个叫罗伯特的人附在记录上
我希望查询只返回记录3,因为它有“Da”和“Rob”的匹配项。我不确定,但我想您需要一个like语句,在Da之后有一个通配符
SELECT DISTINCT
am.id AS id,
am.flagged AS flagged,
am.name AS name,
am.type AS type,
am.file AS file,
am.s3_tag AS s3_tag,
am.low_s3_tag AS low_s3_tag
FROM accounts_media am
LEFT JOIN accounts_location_media alm ON am.id = alm.media_id
LEFT JOIN accounts_location al ON al.id = alm.location_id
LEFT JOIN accounts_person_media apm ON am.id = apm.media_id
LEFT JOIN accounts_person ap ON ap.id = apm.person_id
LEFT JOIN accounts_event_media_record aemr ON am.id=aemr.media_id
LEFT JOIN accounts_medianote_media_record amma ON am.id=amma.media_id
LEFT JOIN accounts_medianote amn ON amma.medianote_id=amn.id
WHERE
am.account_id = '1234'
AND am.flagged = FALSE
AND (accounts_person.first_name like '%Da%'
OR accounts_person.first_name like '%Rob%')
AND accounts_person.account_id = '1234'
我不确定,但我想你需要一个类似的声明,在Da之后有一张通配符
SELECT DISTINCT
am.id AS id,
am.flagged AS flagged,
am.name AS name,
am.type AS type,
am.file AS file,
am.s3_tag AS s3_tag,
am.low_s3_tag AS low_s3_tag
FROM accounts_media am
LEFT JOIN accounts_location_media alm ON am.id = alm.media_id
LEFT JOIN accounts_location al ON al.id = alm.location_id
LEFT JOIN accounts_person_media apm ON am.id = apm.media_id
LEFT JOIN accounts_person ap ON ap.id = apm.person_id
LEFT JOIN accounts_event_media_record aemr ON am.id=aemr.media_id
LEFT JOIN accounts_medianote_media_record amma ON am.id=amma.media_id
LEFT JOIN accounts_medianote amn ON amma.medianote_id=amn.id
WHERE
am.account_id = '1234'
AND am.flagged = FALSE
AND (accounts_person.first_name like '%Da%'
OR accounts_person.first_name like '%Rob%')
AND accounts_person.account_id = '1234'
试试这个:
WHERE
am.account_id = '1234'
AND am.flagged = FALSE
-- AND ( ap.first_name LIKE '%Da%' OR ap.first_name LIKE '%Rob%')
AND EXISTS
( SELECT 1
FROM accounts_person apx
WHERE apx.first_name LIKE '%Da%'
AND apx.account_id = am.account_id
)
AND EXISTS
( SELECT 1
FROM accounts_person apy
WHERE apy.first_name LIKE '%Rob%'
AND apy.account_id = am.account_id
)
试试这个:
WHERE
am.account_id = '1234'
AND am.flagged = FALSE
-- AND ( ap.first_name LIKE '%Da%' OR ap.first_name LIKE '%Rob%')
AND EXISTS
( SELECT 1
FROM accounts_person apx
WHERE apx.first_name LIKE '%Da%'
AND apx.account_id = am.account_id
)
AND EXISTS
( SELECT 1
FROM accounts_person apy
WHERE apy.first_name LIKE '%Rob%'
AND apy.account_id = am.account_id
)
唯一的问题是,如果我需要确保accounts\u person表中有两个或多个名字。我编辑了上面的问题以反映这一点。您的更新仍然不起作用,因为accounts\u person.first\u name永远不会像“%Da%”和“%Rob%”,因为一条记录一次只能有一条。因此,这和那里总是会失败。这就是为什么我需要用嵌套的SELECT语句执行IN语句。这有意义吗?或那里也不起作用。因为它会给我的结果可能只包含“Da”或“Rob”,而不是同时包含“Da”或“Rob”的记录。提供一些您希望返回的数据可能会有所帮助。我在底部用一个示例更新了原始问题。这有帮助吗?唯一的问题是如果我需要确保accounts\u person表中有两个或多个名字。我编辑了上面的问题以反映这一点。您的更新仍然不起作用,因为accounts\u person.first\u name永远不会像“%Da%”和“%Rob%”,因为一条记录一次只能有一条。因此,这和那里总是会失败。这就是为什么我需要用嵌套的SELECT语句执行IN语句。这有意义吗?或那里也不起作用。因为它会给我的结果可能只包含“Da”或“Rob”,而不是同时包含“Da”或“Rob”的记录。提供一些您希望返回的数据可能会有所帮助。我在底部用一个示例更新了原始问题。这有帮助吗?你是在寻找名字以Da和Rob开头的记录,还是任何以Da或Rob开头的记录?我需要有Da和Rob的记录。不一定以开始,但包含。似乎你应该使用连接。njk,你能举个例子说明我如何使用连接来完成此操作吗?你如何将Dan和Robert附加到记录中?这是否意味着有两个帐户\个人记录附加到一个帐户\ id?您是否正在查找名称以Da和Rob开头的记录,或任何以Da或Rob开头的记录?我需要包含Da和Rob的记录。不一定以开始,但包含。似乎你应该使用连接。njk,你能举个例子说明我如何使用连接来完成此操作吗?你如何将Dan和Robert附加到记录中?这是否意味着有两个帐户\u个人记录附加到一个帐户\u id?