2013-07-18 61 views
0

我有一个表,我需要将从verse表连接到章节表的值。 只有在经文字段值以插入符号('^')开头时才应该这样做。他们都共享entity_id列。使用select结果替换字符串

我做了以下选择查询,并得到了价值,我需要:

SELECT 
chapter.field_bible_chapter_value, 
verse.field_bible_verse_value, 
verse.entity_id 
FROM field_data_field_bible_verse AS verse 
INNER JOIN field_data_field_bible_chapter AS chapter 
ON chapter.entity_id = verse.entity_id 
WHERE verse.field_bible_verse_value LIKE '^%' 
ORDER BY verse.entity_id 

现在我坚持要使用这个数据做出章节现场实际变化。

我该如何解决这个问题?

+0

甚至不知道这是什么意思 – Skarlinski

+0

sry,我以为是T-sql(不是mysql)。在T-SQL中,我们可以将此查询保存为临时表达式,因此当您执行使用CTE /派生列(表达式)的更大代码段时,它将使用此查询的输出并使用此数据执行其他数据处理。 – 007

回答

1

如果我没有理解要求正确,请尝试以下SQL:

UPDATE field_data_field_bible_verse AS verse 
INNER JOIN field_data_field_bible_chapter AS chapter 
ON chapter.entity_id = verse.entity_id 
SET chapter.field_bible_chapter_value = concat(verse.field_bible_verse_value,' ',chapter.field_bible_chapter_value) 
WHERE verse.field_bible_verse_value LIKE '^%' 

的逻辑如下:

IF entity_id is equal THEN 
    IF the verse_value starts with '^' THEN 
     Concatenate verse value with chapter value 
     Replace chapter value with the concatenated value 
+0

的倒数第二个例子非常感谢。所以实际上没有必要使用select?更新可以像select一样检索数据? – Skarlinski

+0

是的。无需使用select。在你的场景中可以使用语法。 – sel

0

看来你想要一个多表更新。语法是相当直接的,看到http://dev.mysql.com/doc/refman/5.0/en/update.html

对于你的榜样,这将是像

UPDATE field_data_field_bible_verse AS verse 
INNER JOIN field_data_field_bible_chapter AS chapter 
ON chapter.entity_id = verse.entity_id 
SET chapter.TARGET_COLUMN = concat(YOUR_VALUES) 
WHERE verse.field_bible_verse_value LIKE '^%' 

(你必须填写与正确的名称和值SET线)

+0

谢谢。问题是,在你放置'YOUR_VALUES'的地方,我需要使用select所获取的值。每一行都需要连接不同的值 - 特定章节需要它是特定的诗句。在'WHERE'子句中,应该有entity_id,并在SET子句中使用独特的分段值 – Skarlinski

+0

没有一些示例数据,很难理解您的用例。可能带有子查询的“UPDATE”将解决您的问题。看看http://dev.mysql.com/doc/refman/5.0/en/subqueries.html – obecker

相关问题