我需要使用LENGTH函数从2个不同的表中提取值,但仅使用1个查询

时间:2019-03-26 21:47:25

标签: mysql sql function rows

我有2个非常基本的表,每个表只有1列。表“肉”列出了8或9种不同类型的肉,表“奶酪”列出了各种奶酪。

我知道如何从任一表中提取所有包含5个以上字符的值(示例:SELECT * from cheeses WHERE LENGTH(c_item) > 5;),该表将返回名称中包含5个以上字符的任何奶酪名称。

但是当我尝试同时加入两者时:

SELECT
    *
FROM
    meats
JOIN
    cheeses
WHERE LENGTH(m_item) OR LENGTH(c_item) > 5;

我不仅得到笛卡尔结果,而且列出了所有项,无论其名称中的字符数如何。

学校的任务是创建一个查询,该查询仅提取具有5个(或更多)字符的肉和奶酪名称,并在单个查询中完成!

我尝试了各种JOINS,UNION,语法布局(例如,包括在每个函数之前使用WHERE关键字,将AND替换为OR等)

我需要这个:

SELECT * from cheeses WHERE LENGTH(c_item) > 5;

还有:

SELECT * from meats WHERE LENGTH(m_item) > 5;

合并为一条语句。

2 个答案:

答案 0 :(得分:1)

通过学校作业,很难从外部猜测确切的要求,但这听起来像是union用例。

但是,请注意length()函数返回的长度为字节,而不是字符。 char_length()函数可以返回以字符为单位的长度。

SELECT * from cheeses WHERE CHAR_LENGTH(c_item) > 5
UNION ALL
SELECT * from meats WHERE CHAR_LENGTH(m_item) > 5; 

此外,请注意union要求查询具有完全相同数量的字段,并且它们的数据类型也应该彼此兼容。因此,如果您的cheesesmeats表在同一序号位置具有不同数目的列或具有不同数据类型的列,那么您必须相应地调整查询,就不能简单地使用{{1} }。

答案 1 :(得分:0)

SELECT * from cheeses WHERE LENGTH(c_item) > 5
UNION ALL
SELECT * from meats WHERE LENGTH(m_item) > 5;