使用类似语句中的mysql变量进行SQL查询?

时间:2011-06-14 11:59:31

标签: mysql

我想根据另一个列值(例如

)选择/检查文本列中的值
SELECT tableA.randomID, wp_posts.post_content, wp_posts.ID
FROM tableA, wp_posts 
WHERE wp_posts.post_content LIKE '%tableA.randomID%' 
AND tableA.randomID = '110507B2VU'

但是这不起作用,我该如何设置LIKE语句

这不起作用:

SELECT tableA.randomID, wp_posts.post_content, wp_posts.ID
FROM tableA, wp_posts 
WHERE wp_posts.post_content LIKE '%110507B2VU%'

2 个答案:

答案 0 :(得分:13)

当你用引号括起来时 - 它被视为一个文字值,所以在你的第一个查询中 - 你把LIKE '%tableA.randomID%'放在哪里--MySQL实际上把它当作一个字符串。

如果没有引号,它将取值 - 即:

WHERE something LIKE tableA.randomID

这实际上会将'something'与tableA.randomID的值进行比较,而不是文字字符串。

然后包含你的%通配符,使你的LIKE语句与'equals'比较不同,试试CONCAT()函数。

WHERE something LIKE CONCAT("%",tableA.randomID,"%")

如果tableA.randomID的值是这样的话,那将会是..'banana'实际上最终是这样的:

WHERE something LIKE '%banana%'

我希望我能够清楚地解释清楚; - )

答案 1 :(得分:2)

你可以使用类似

的concat()
SELECT tableA.randomID, wp_posts.post_content, wp_posts.ID
FROM tableA, wp_posts 
WHERE wp_posts.post_content LIKE CONCAT('%',tableA.randomID,'%')
AND tableA.randomID = '110507B2VU'

在你的情况下

x <- c(4, 5, 5, 8, 12, 12, 12, 13, 15, 15, 18, 19, 20, 23, 37, 37, 37, 37, 37, 41)
vals <- unique(x)
# print indices
for (i in 1:length(vals)) print(which((x >= vals[i] - 3) & (x <= vals[i] + 3)))
# print values
for (i in 1:length(vals)) print(x[which((x >= vals[i] - 3) & (x <= vals[i] + 3))])

[1] 1 2 3
[1] 1 2 3 4
[1] 2 3 4
[1]  5  6  7  8  9 10
[1]  5  6  7  8  9 10
[1]  5  6  7  8  9 10 11
[1]  9 10 11 12 13
[1] 11 12 13
[1] 11 12 13 14
[1] 13 14
[1] 15 16 17 18 19
[1] 20

[1] 4 5 5
[1] 4 5 5 8
[1] 5 5 8
[1] 12 12 12 13 15 15
[1] 12 12 12 13 15 15
[1] 12 12 12 13 15 15 18
[1] 15 15 18 19 20
[1] 18 19 20
[1] 18 19 20 23
[1] 20 23
[1] 37 37 37 37 37
[1] 41