我在sql gui工具'SQLite Database Browser 2.0 b1'中使用'Execute SQL'功能。'
我不确定我遇到的问题是因为浏览器中的错误还是我的SQL错误。我知道我在浏览器工具中发现了几个错误。
总之。这是我目前正在处理的问题......
我在数据库中有两个表:
TOYS
------------------------------
TOY_ID TOY_DESC
------------------------------
1 Green truck, plastic
2 Doll, plastic, wood
3 Stuffed cloth animal
4 Board game cardboard and plastic
etc .....
MATERIALS
-----------------------------
TOY_ID PLASTIC
-----------------------------
1
2
3
4
etc ......
我正在尝试更新MATERIALS表,以便如果与TOYS表中匹配的TOY_ID相对应的TOY_DESC包含单词'plastic',它应该将数字1插入到MATERIALS表的PLASTIC列中。这就是我的尝试:
UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic%');
当我尝试这个时它没有做任何事。
然后我试了......UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE "%plastic%");
然后给了我:
MATERIALS
-----------------------------
TOY_ID PLASTIC
-----------------------------
1 1
2
3
4
etc ......
然后我试了......
UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic,%');
并且只更新了另外一条记录:
MATERIALS
-----------------------------
TOY_ID PLASTIC
-----------------------------
1 1
2 1
3
4
etc ......
但是,它仍然没有更新描述中包含塑料一词的所有记录!!我不明白。为什么不是所有记录都在更新?我能理解在单词的末尾是否有其他类型的符号或字符,但没有。它就像其他描述中完全相同的单词,它们都被跳过了! 我更加困惑的是,为什么更新在所有情况下都不起作用,直到我用双引号替换单引号。这是因为数据库类型不同(sqlite与mysql)?
编辑**:
我尝试了下面海报中的建议,将其进一步分解,看看问题可能出在哪里。当我这样做时:
SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic%'
我成功获得了描述中包含单词plastic的所有记录的列表。所以LIKE语句不是问题。现在的问题是如何将这些内容反映在MATERIALS表中?
我猜我每次比赛都需要一个循环?
答案 0 :(得分:1)
通过分解查询的组件来解决您的查询问题。首先运行嵌套/子查询:
SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE "%plastic%"
它能为您提供您期望的结果吗?
现在你可以专注于类似的表达。我不是sqllite专家,但看起来好像%like%
需要两边的字符。所以你可以这样做:
SELECT TOY_ID FROM TOYS
WHERE
TOY_DESC LIKE "%plastic%"
OR TOY_DESC LIKE "plastic%"
OR TOY_DESC LIKE "%plastic"
此处还有其他一些可能性:SQLite query, 'LIKE'
更新:太好了,现在你知道你正在获得预期的ID而不必再乱用那个子查询了。现在尝试代替WHERE TOY_ID = (
使用WHERE TOY_ID in (