4

http://i.stack.imgur.com/ZRH9c.jpg(请参阅数据库结构示例图)

大家好,

我正在尝试在两个以特定字母开头的表中搜索单词,但我不知道如何进行正确的连接。

如果“user_vocabulary”中没有给出 voc_id,我想从 user_vocabulary 中获取单词,但如果有 voc_id,我想从“system_vocabulary”中读取所有数据,其中 user_vocabulary.voc_id=system.vocabulary.id 。

我用来读取一张表(仅供参考):SELECT * FROM user_vocabulary WHERE word LIKE '$user_input%' ORDER BY word ASC

我发现了一些或多或少相似的帖子,但似乎无法将它们转换为这个问题。

任何帮助深表感谢。欢呼汤姆

4

3 回答 3

0

试试这个

SELECT *
FROM user_vocabulary
left join system_vocabulary
on system_vocabulary.voc_id = user_vocabulary.id
WHERE user_vocabulary.word LIKE '%$user_input%' or system_vocabulary.word like     '%$user_input%'
ORDER BY word ASC

已编辑

另一种方法

SELECT *
FROM user_vocabulary as uv
, system_vocabulary as sv
WHERE uv.word LIKE '%$user_input%'
or sv.word like '%$user_input%'
于 2012-04-10T12:13:28.550 回答
0

这应该根据您的要求工作:

SELECT user_vocabulary.id,
   COALESCE(system_vocabulary.word, user_vocabulary.word) word
FROM user_vocabulary
LEFT JOIN system_vocabulary
   ON system_vocabulary.id = voc_id AND voc_id <> 0
于 2012-04-10T12:33:01.267 回答
0

您需要取自user_vocabulary.wordsystem_vocabulary.word最终出现在输出的同一列中的值。您可以使用以下IF功能执行此操作:

SELECT
  uv.id,
  IF(uv.voc_id = 0,uv.word,sv.word) AS WORD
FROM user_vocabulary uv
LEFT JOIN system_vocabulary sv
ON (uv.voc_id = sv.id)
HAVING word LIKE '%user_input%'

+------+-------+
| id   | word  |
+------+-------+
|    1 | hat   |
|    2 | home  |
|    3 | hello |
+------+-------+
3 rows in set (0.00 sec)
于 2012-04-11T11:59:07.990 回答