我有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;
合并为一条语句。
答案 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
要求查询具有完全相同数量的字段,并且它们的数据类型也应该彼此兼容。因此,如果您的cheeses
和meats
表在同一序号位置具有不同数目的列或具有不同数据类型的列,那么您必须相应地调整查询,就不能简单地使用{{1} }。
答案 1 :(得分:0)
SELECT * from cheeses WHERE LENGTH(c_item) > 5
UNION ALL
SELECT * from meats WHERE LENGTH(m_item) > 5;