2011-09-29 52 views
0

我的问题是这样的:无法弄清楚如何获得基于列的值不相同的行

说我假设有一个表叫快餐已经一个名为领域具有的“真棒值fastfood_chains温迪斯”和‘花生查’

然后我呼吁fastfood_info另一个表中有一个字段‘fastfood_chain’,但值不等同于其他表,它缩短为‘温迪斯’或‘夹头’

我将如何显示fastfood_chain中的所有行,并让结果使用其他表打印全名,而不仅仅是“我们ndys“还是”Chucks“?

我认为它与LIKE语句有关,但我有困难。任何帮助,将不胜感激。

+0

如果你有两个表匹配是这些名称不一致,那么好的运气。 –

+0

我同意乔 - 目前还没有真正可靠的方法将'花生查克'和'卡克斯'(最终谴责''''并且假设他们实际上指的是同一个地方...')。这就是为什么你将外键存储到'fastfood_chain'表中的原因。哦,这句话暗示了(对我来说)'fastfood_chains'是某种多值列(比如说,用逗号分隔的列表) - 如果是这样的话,你只需要干杯:需要手动干预。 –

+0

对不起,我不是故意在最后加上“s”。我的意思是一个实际的子集 – volk

回答

2

如果您知道第二张表中的fastfood_chain仅包含第一张表中的fastfood_chain的子集,我不明白什么确切的列做你想做的结果,但你可以用FFF和FFC前缀一一列举:

SELECT * FROM fastfood_chains ffc 
INNER JOIN fastfood_info ffi ON 
    ffc.fastfood_chain LIKE CONCAT('%', ffi.fastfood_chain, '%') 

请注意,这可能取决于很多因素是极其缓慢。

P.S .:我目前无法访问MySQL实例。希望它现在可以工作。 对于MSSQL的用户,最后一行应该是:

 ffc.fastfood_chain LIKE '%' + ffi.fastfood_chain + '%' 
+0

我尝试了这个,并且即时得到“你的SQL语法错误;查看与你的MySQL服务器版本相对应的手册,以便在'+ ffi.fastfood_chain +'%'LIMIT 0附近使用正确的语法,30'在第4行 – volk

+0

这是MSSQL语法,我将立即编辑我的帖子到MySQL语法 –

+0

太好了,非常感谢,它的工作:) – volk

1

这样做的可能方式是:

SELECT F.FASTFOOD_CHAIN, I.* 
FROM FASTFOOD F 
LEFT OUTER JOIN FASTFOOD_INFO I 
ON F.FASTFOOD_CHAIN LIKE '%' || I.FASTFOOD_CHAIN || '%' 
+0

我只是试过,我得到#1066 - 不是唯一的表/别名:'我' – volk