我需要帮助。
我有两张桌子:ADDRESS
和CUSTOM
我可以用ADDRESS.ID = CUSTOM.ADDRESSID
链接这两个表
我想选择CUSTOM.NAME = 'NUMBER'
的所有地址
和CUSTOM.VALUE = '5'
但是,在这些地址上,我想显示字段CUSTOM.VALUE
,其中CUSTOM.NAME = 'INFO'
以下是一些例子
ADDRESS:
ID NAME STREET
1 Paul 65 blue street
2 John 50 red street
CUSTOM:
ID IDADDRESS NAME VALUE
1 1 NUMBER 5
2 1 INFO 1st floor
3 2 NUMBER 6
4 2 INFO no info
我想要的结果是: 保罗 - 65蓝街 - 一楼
有人可以帮我解决这个问题吗? 我试过了:
SELECT * FROM ADDRESS, CUSTOM WHERE ADDRESS.ID=CUSTOM.ADDRESSID AND ((CUSTOM.NAME='NUMBER' AND CUSTOM.VALUE='5') OR CUSTOM.NAME='INFO')
答案 0 :(得分:1)
尝试以下操作,加入CUSTOM两次
SELECT *
FROM ADDRESS, CUSTOM c1, CUSTOM c2
WHERE ADDRESS.ID = c1.ADDRESSID
AND c1.ADDRESSID = c2.ADDRESSID and c1.NAME <> c2.NAME
也许我删除了一些仍需要的条件......
答案 1 :(得分:0)
表格&#39; CUSTOM&#39;似乎包含2种不同类型的数据,NUMBER和INFO。这意味着您应该将这两种类型的数据视为不同的表,并单独加入。您的查询会/可能会这样:
SELECT a.NAME
, a.STREET
, inf.VALUE
FROM ADDRESS a
JOIN CUSTOM num
ON a.ID = num.IDADDRESS
AND num.NAME = 'NUMBER'
JOIN CUSTOM inf
ON a.ID = inf.IDADDRESS
AND inf.NAME = 'INFO'
WHERE num.VALUE = '5'
如果您有选项,请尝试将表CUSTOM放入2个实际表中,每个表只包含一种类型的数据。这将使其他开发人员清楚地了解表中的数据类型以及如何正确使用表。
答案 2 :(得分:0)
我想要以下内容(它看起来并不真正需要&#34;自定义NUMBER&#34;字段的值):
SELECT a.id, a.name, a.street, c.value
FROM address a LEFT JOIN custom c
ON a.id = c.addressid
AND c.name = 'INFO'
WHERE EXISTS ( SELECT 1 FROM custom c1
WHERE c1.addressid = a.id
AND c1.name = 'NUMBER'
AND c1.value = '5' );
这将获取ADDRESS
中CUSTOM
中相应行的所有行,其中name
= 'NUMBER'
和value
= {{1} }。即使没有相应的'5'
行(因此'INFO'
而不是LEFT JOIN
),它也会检索这些行...在这些情况下,INNER JOIN
将返回自定义值。