在我的MySQL数据库中,我有两个表:pos_tables
和pos_user_login
。在
pos_tables
,我有四个职员字段:staff1
,staff2
,staff3
,
staff4
。这4个字段包含存储在其中的staffmembers的ID
pos_user_login
。在pos_tables
中,这些员工ID可能会重复,但staff_id
是pos_user_login
中的主键。
我要做的是使用
条件加入这两个表if pos_user_login.staff_id=(pos_tables.staff1 OR
pos_tables.staff2 OR
pos_tables.staff3 OR
pos_tables.staff4)
...如果来自pos_tables
的4个字段中的任何一个与主键相匹配
pos_user_login
,然后从pos_tables
获取该记录。
我需要运行什么查询才能执行此操作?
----编辑----
我应该使用这样的东西吗?
SELECT *
FROM pos_user_login pu
WHERE pos_user_login_id IN (SELECT *
FROM pos_tables
WHERE staff1 = pu.pos_user_login_id
OR staff2 = pu.pos_user_login_id
...);
----编辑2 ----
示例记录
pos_tables
----------
table_number (1 )
staff1 (10)
staff2 (11)
staff3 (12)
pos_user_login
--------------
staff_id (10),
type (drinks_person)
staff_id(11), type (order_taker)
staff_id(12), type(cleaner)
使用WHERE条件(type="drinks_person")
进行比较后,输出
应该是:
table_number(1), staff1(10), staff2("null"), staff3(null)
答案 0 :(得分:4)
您可以使用IN()
运算符:
SELECT *
FROM pos_tables JOIN pos_user_login
ON pos_user_login.staff_id IN (
pos_tables.staff1,
pos_tables.staff2,
pos_tables.staff3,
pos_tables.staff4
)
答案 1 :(得分:1)
声音的类似数据尚未很好地存储。你可以发布架构吗?
这是我的建议:使用ifnull并进行多个连接,如果其中一个id有连接,你可以解决。我已经返回“name”,假设pos_user_login有该字段,但您将返回所需的任何字段。
SELECT
ifnull(p1.id,
ifnull(p2.id,
ifnull(p3.id,
ifnull(p4.id,
'no matching record',
p4.name,
p3.name,
p2.name,
p1.name) as staff_name
FROM
pos_tables t
LEFT JOIN pos_user_login p1 on staff1=t.id
LEFT JOIN pos_user_login p2 on staff2=t.id
LEFT JOIN pos_user_login p3 on staff3=t.id
LEFT JOIN pos_user_login p4 on staff4=t.id
答案 2 :(得分:1)
有
select a.*
from pos_tables a left join
pos_user_login b1 on a.staff1=b1.staff_id left join
pos_user_login b2 on a.staff2=b2.staff_id left join
pos_user_login b3 on a.staff3=b3.staff_id left join
pos_user_login b4 on a.staff4=b4.staff_id
where (b1.staff_id is not null or
b2.staff_id is not null or
b3.staff_id is not null or
b4.staff_id is not null)